2013-12-18 2 views
4

나는 100 개의 요소 목록을 가지고 있으며 각 요소는 431 개의 요소를 포함하고 있습니다.r에 mapply를 사용하여 목록의 합계를 얻는 방법

각 목록의 값을 합치려면 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 개의 요소를 입력하는 것은 불가능합니다. 누군가 제발 도와 줄 수 있니?

내가 그것을 가지고 do.call

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

답변

4

사용 감사드립니다. mapply 대신 Reduce("+", o)을 사용했습니다. @의 Ramnath의 대답에

+0

신난다! 이 작품. 고맙습니다. : D – user1828605

+3

당신이 게시 한'Reduce' 솔루션은보다 세련된 IMHO입니다. – Ramnath

3

변화는 :

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 
+0

더 우아합니다. – Ramnath

관련 문제