假设我有一个矩阵,我想从第一行的 column1、第二行的 column5 和第三行的 column4 中选择值(...)。这些列作为列名存储在向量中,并且该向量中的位置等于要选择该列的行。
我怎样才能有效地实现这一点,即没有循环?
(背景是:我的目的是在模拟中使用它,这就是为什么我想对其进行矢量化以加快速度)
一个最小的例子:
# Creating my dummy matrix
aMatrix <-matrix(1:15,3,5,dimnames=list(NULL,LETTERS[1:5]))
aMatrix
A B C D E
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
# Here are the columns I want for each row
columns <-c("A","E","D")
columns
[1] "A" "E" "D"
# means: select for row 1 column "A" = 1,
# select for row 2 column "E" = 11,
# select for row 3 column "D" = 12
# Now obviously I could do looping, but this is inefficient
for (i in columns) print(grep(i,colnames(aMatrix))) #grep is necessary for my specific matrix-names in my simulation only.
[1] 1 #wanting col. 1 for row 1
[1] 5 #wanting col. 5 for row 2
[1] 4 #wanting col. 4 for row 3
我刚刚看到我这样做的循环方式效率不高。
我正在考虑 sapply/tapply 但不知何故无法让它工作,因为有两个参数发生了变化(要在矩阵中搜索的行,以及要从目标列名向量中选择的字母)。
我会非常感谢您的帮助。谢谢!
亚娜
PS 我在这里使用“grep”,因为列名是我将运行的模拟中实际列名的子字符串。但是创建子字符串会使示例更加复杂,因此我跳过了它。