如何在r中使用mapply获取列表的总和

时间:2013-12-18 23:48:43

标签: r mapply

我有一个包含100个元素的列表,每个元素包含431个元素。

我想使用mapply对每个列表中的值求和。例如,假设我有一个包含5个元素的列表,但每个元素都有另外5个元素。

> o
[[1]]
[1] 1 2 3 4 5

[[2]]
[1] 1 2 3 4 5

[[3]]
[1] 1 2 3 4 5

[[4]]
[1] 1 2 3 4 5

[[5]]
[1] 1 2 3 4 5

> mapply(sum, o[[1]], o[[2]], o[[3]], o[[4]], o[[5]])
[1]  5 10 15 20 25

但是我怎么能这样说100个元素呢。输入100个元素作为args是不可行的。有人可以帮忙吗?

谢谢

3 个答案:

答案 0 :(得分:8)

我明白了。我使用Reduce("+", o)代替mapply

答案 1 :(得分:4)

使用do.call

mapply_sum = function(...){mapply(sum, ...)}
do.call(mapply_sum, o)

答案 2 :(得分:3)

@ Ramnath答案的变化:

do.call(mapply,c(sum,o))
#[1]  5 10 15 20 25

但是,mapply似乎比使用Reduce要慢得多,因为在回答中:

o <- replicate(1000,1:1000,simplify=FALSE)

system.time(Reduce("+", o))
#   user  system elapsed 
#   0.02    0.00    0.01 

system.time(do.call(mapply,c(sum,o)))
#   user  system elapsed 
#   0.94    0.00    0.93