我有一个关于如何将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)
答案 0 :(得分:4)
<强> EDITED 强>
以下是使用apply
和sum
返回在多维表中计算的总和的示例:
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