为r中的索引对子数组子集

时间:2018-07-05 13:25:13

标签: arrays r subset

尽管我已经进行了搜索,但是找不到我的问题的简单答案。 假设我有一个数组:

    vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
result <- array(c(vector1,vector2),dim = c(3,3,2))

现在,我想以某种方式对这个数组进行子集化,以便从某些行和列中获取元素。例如:

result[1,3,1:2]
result[3,1,1:2]

因为我有很多索引,所以它们在

中有问题
rowind=c(1,3)
colind=c(3,1)

对于子集,我尝试以这种方式使用行和列的向量

dim(result[rowind,colind,1:2])

[1] 2 2 2

这不是我想要的。我希望我的输出是每对索引的一个值。实际上,我希望提取的矩阵的尺寸为2x2(而不是2x2x2)。 让您知道我尝试了“循环”。但是问题是我有很多数组,这将非常耗时。

result_c=matrix(NA,nrow=2,ncol=2)

for (i in 1:2){
  result_c[i,]=result[rowind[i],colind[i],] 
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

只要我对您的理解正确,我们可以使用Map

Map(function(i, j) result[i, j, 1:2], rowind, colind)
#[[1]]
#[1] 13 13
#
#[[2]]
#[1] 3 3

或使用matrix简化为mapply

mapply(function(i, j) result[i, j, 1:2], rowind, colind)
#     [,1] [,2]
#[1,]   13    3
#[2,]   13    3

Mapmapply的包装,它不会简化结果,从而生成list(而不是matrix)。

答案 1 :(得分:0)

我们可以传递matrix索引来对数据进行子集

result[cbind(rep(rowind, each = 2), rep(colind, each = 2), 1:2)]
#[1] 13 13  3  3