R:有效地在每列选择不同的行

use*_*923 2 performance r subset

我有一个矩阵:

x = rbind(1:5, 6:10)
x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10 
Run Code Online (Sandbox Code Playgroud)

我想根据索引为每列选择不同的行.例如,我可能想要一个看起来像的新矢量

[1]  1  2  8  4 10
Run Code Online (Sandbox Code Playgroud)

通过选择c(1,1,2,1,2)适当列的行.我可以这样做:

diag(x[c(1,1,2,1,2),])
[1]  1  2  8  4 10
Run Code Online (Sandbox Code Playgroud)

但这是内存效率低下因为它创建了这个矩阵:

x[c(1,1,2,1,2),]
    [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    1    2    3    4    5
[3,]    6    7    8    9   10
[4,]    1    2    3    4    5
[5,]    6    7    8    9   10
Run Code Online (Sandbox Code Playgroud)

鉴于真实的数据集和多次迭代,我担心严重的性能问题.如何有效地根据我的索引提取相同的值?

akr*_*run 6

我们可以使用row/column索引

 x[cbind(c(1,1,2,1,2), 1:ncol(x))]
 #[1]  1  2  8  4 10
Run Code Online (Sandbox Code Playgroud)