多维数组中的部分行和

时间:2011-04-12 13:22:50

标签: r multidimensional-array

我有一个关于如何将R函数应用于多维数组的问题。

例如,考虑这个操作,我通过其他条目的总和来减少条目。

ppl["2012",,,,,1] <- ppl["2012",,,,,1]
- ppl["2012",,,,,2] - ppl["2012",,,,,3] - ppl["2012",,,,,4]
- ppl["2012",,,,,5] - ppl["2012",,,,,6] - ppl["2012",,,,,7]
- ppl["2012",,,,,8]

虽然在这种情况下减去单个值可能是可行的,但我更倾向于采用面向矢量的方法。

如果我熟悉多维矩阵代数,我可能会想出在应用时执行必要操作的矩阵,但考虑到所涉及的维数,这个过于复杂。

sum(ppl["2012",,,,,2:8])不是正确的解决方案,因为sum()始终返回标量。

我可以使用执行必要操作的循环,但这与面向矢量编程的范例相矛盾。

感谢您的帮助!

编辑:根据Andrie的建议,这是原始问题的解决方案: ppl[paste(i),land,,,,1] <- ppl[paste(i),land,,,,1] - apply(ppl[paste(i),land,,,,2:8],c(1,2,3),sum)

1 个答案:

答案 0 :(得分:4)

<强> EDITED

以下是使用applysum返回在多维表中计算的总和的示例:

mat <- array(1:27, dim=c(3, 3, 3))

假设你想计算前两个维度的每个组合的第三维的总和。

然后执行此操作的代码变为:

apply(mat, c(1,2), sum)

     [,1] [,2] [,3]
[1,]   30   39   48
[2,]   33   42   51
[3,]   36   45   54