Как получить сумму списка с помощью mapply в r

У меня есть список из 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 элементов в качестве аргументов. Может кто-нибудь помочь?

Спасибо


person user1828605    schedule 18.12.2013    source источник


Ответы (3)


Я понял. Я использовал Reduce("+", o) вместо mapply.

person user1828605    schedule 18.12.2013

Используйте 1_

mapply_sum = function(...){mapply(sum, ...)}
do.call(mapply_sum, o)
person Ramnath    schedule 18.12.2013
comment
Опубликованное вами решение Reduce более элегантно, ИМХО. - person Ramnath; 19.12.2013

Вариант ответа @ Ramnath:

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

Однако mapply, похоже, значительно медленнее, чем использование Reduce, как в ответе op:

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 
person thelatemail    schedule 19.12.2013
comment
Это более элегантно. - person Ramnath; 19.12.2013