4

我有一个包含 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 是不可行的。有人可以帮忙吗?

谢谢

4

3 回答 3

8

我知道了。我用Reduce("+", o)而不是mapply.

于 2013-12-18T23:59:08.977 回答
4

利用do.call

mapply_sum = function(...){mapply(sum, ...)}
do.call(mapply_sum, o)
于 2013-12-18T23:56:40.827 回答
3

@Ramnath 答案的变化:

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

但是,mapply似乎比Reduce在 op 的答案中使用 as 慢得多:

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 
于 2013-12-19T00:00:37.013 回答