我有一个关于如何将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()
总是返回标量。
我可以使用循环来执行必要的操作,但这与面向向量编程的范例相矛盾。
谢谢你的帮助!
编辑:这里是解决原来的问题,基于安德烈的建议:ppl[paste(i),land,,,,1] <- ppl[paste(i),land,,,,1] - apply(ppl[paste(i),land,,,,2:8],c(1,2,3),sum)
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