我对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