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