2013-12-18 11 views
4

У меня есть список из 100 элементов, и каждый элемент содержит 431 элемент.Как получить сумму списка с помощью mapply в r

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

Спасибо

ответ

8

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

+1

Хорошее решение !! – Ramnath

4

Использование do.call

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

Awesome! это работает. Спасибо. : D – user1828605

+3

Решение «Уменьшить», которое вы отправили, более элегантно ИМХО. – Ramnath

3

Вариации на ответ @ 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 
+0

Это более элегантно. – Ramnath

 Смежные вопросы

  • Нет связанных вопросов^_^