用于多维数组的R数组索引

我对R中的多维数组有一个简单的数组索引问题.我正在进行大量的模拟,每个模拟都将结果作为矩阵给出,其中条目被分类为类别.所以例如结果看起来像

aresult<-array(sample(1:3, 6, replace=T), dim=c(2,5), 
               dimnames=list(
                 c("prey1", "prey2"), 
                 c("predator1", "predator2", "predator3", "predator4", "predator5")))

现在我想将我的实验结果存储在一个3D矩阵中,其中前两个维度与aresult相同,第三个维度包含落入每个类别的实验数量.所以我的计数数组看起来应该是这样的

Counts<-array(0, dim=c(2, 5, 3), 
              dimnames=list(
                c("prey1", "prey2"), 
                c("predator1", "predator2", "predator3", "predator4", "predator5"),
                c("n1", "n2", "n3")))

并且在每次实验之后,我想使用aresults中的值作为索引,将第三维中的数字增加1.

如何在不使用循环的情况下执行此操作?

最佳答案
这听起来像是矩阵索引的典型工作.通过使用三列矩阵对Counts进行子集化,每行指定我们想要提取的元素的索引,我们可以自由地提取和增加我们喜欢的任何元素.

# Create a map of all combinations of indices in the first two dimensions
i <- expand.grid(prey=1:2, predator=1:5)

# Add the indices of the third dimension
i <- as.matrix( cbind(i, as.vector(aresult)) )

# Extract and increment
Counts[i] <- Counts[i] + 1

转载注明原文:用于多维数组的R数组索引 - 代码日志