在R中使用位置数组对矩阵进行子集操作?

4
在R中,我想使用包含位置的数组来对矩阵进行子集操作。例如,如果我有这个矩阵:
mymatrix <- matrix(c(1,2,3,4,5,6,7,8,9),ncol=3,byrow=TRUE)

我希望能够返回一个包含列中所找到的值的数组。
mycols <- c(2,3,2)

但是mymatrix[,mycols]会返回一个3x3的矩阵,而不是我想要的结果。
c(2,6,8)

Google和“subset”似乎没有帮助我。有人能指引我正确的方向吗? 谢谢, mconsidine


是的,这回答了问题。在此之前,我没有看到您链接的答案,也没有看到它链接的那个答案,它们都是答案。谢谢。 - mconsidine
3个回答

2

使用行/列索引,可以将行序列与cbind组合

mymatrix[cbind(seq_len(nrow(mymatrix)), mycols)]
[1] 2 6 8

2
我们可以这样使用mapply
myrows <- 1:nrow(mymatrix)
mycols <- c(2,3,2)

mapply(function(i, j) mymatrix[i,j], myrows, mycols)
[1] 2 6 8

2

使用mapply + asplit的另一种基于R语言的选项

> mapply(`[`, asplit(mymatrix, 1), mycols)
[1] 2 6 8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接