2011-04-12 24 views
2

我有关于如何申请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

您需要使用'apply'与'sum'得到你想要的东西。但是,由于您没有提供数据**的示例**,因此我无法给出确切的代码。 – Henrik 2011-04-12 13:50:11

回答

4

EDITED

下面是使用applysum返回跨越计算总和的例子多维表格:

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

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

然后代码要做到这一点就变成了:

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

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

感谢您的回答!事实上,这两个数字是相同的,但我不想减去总数。 相反,我想计算每一年,每一个国家,每一个家庭组成等值的最后一维的总和。 – mzuba 2011-04-12 14:01:16

+0

@Martin Zuba,感谢您的评论。我修改了我的答案以反映这一点。 – Andrie 2011-04-12 14:09:14

+0

是的,那是我需要的!某种求和算法,它会返回一个维度小于原始维度的结果。非常感谢! – mzuba 2011-04-12 14:17:51