我有下面的矩阵prob.matx
:
prob.matx <- structure(c(0.182, 0.212, 0.364, 0.242, 0.242, 0.152, 0.394,
0.212, 0.364, 0.091, 0.273, 0.273, 0.333, 0.242, 0.364, 0.061,
0.273, 0.333, 0.212, 0.182, 0.303, 0.333, 0.182, 0.182),
dim = c(4L, 6L),
dimnames = list(c("A", "C", "G", "T"),
c("V1", "V2", "V3", "V4", "V5", "V6")))
它看起来像这样:
V1 V2 V3 V4 V5 V6
A 0.182 0.242 0.364 0.333 0.273 0.303
C 0.212 0.152 0.091 0.242 0.333 0.333
G 0.364 0.394 0.273 0.364 0.212 0.182
T 0.242 0.212 0.273 0.061 0.182 0.182
以及向量DNA
:
DNA <- c("A", "C", "C", "C", "C", "A")
我想根据DNA
向量中的元素和位置提取矩阵值,并返回一个向量,即:
c(prob.matx[DNA[1], 1], prob.matx[DNA[2], 2], prob.matx[DNA[3], 3],
prob.matx[DNA[4], 4], prob.matx[DNA[5], 5], prob.matx[DNA[6], 6])
[1] 0.182 0.152 0.091 0.242 0.333 0.303
这看起来很简单,但是我很难找到一个一步完成的函数,**而不使用apply
或for循环。
3条答案
按热度按时间ohtdti5x1#
我们可以索引
prob.matx
并提取diag
的值。sczxawaw2#
如果数组具有维名称,则可以使用每个维一列的字符矩阵进行索引。
基准测试
mpgws1up3#
我认为@Darren的答案在效率方面已经足够好了(除非你对速度有极端的要求)。我们实际上可以在@Darren的解决方案的基础上做一些不同的事情来提高速度。
让我们想得更远更努力
我们会看到