2013-03-01 2 views
5

을 감안할 때 세 (또는 n 목록) :cbind 항목을 반복적으로

one <- list(a=1:2,b="one") 
two <- list(a=2:3,b="two") 
three <- list(a=3:4,b="three") 

은 무엇이 결과를 얻을 수있는 n 목록에서 각 목록 항목 공업 cbind의보다 효율적인 방법이 될 것입니다? n2 또는 3하지만 빨리 우스꽝스럽게 복잡해질 것입니다 때

mapply(cbind,mapply(cbind,one,two,SIMPLIFY=FALSE),three,SIMPLIFY=FALSE) 

$a 
    [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 2 3 4 

$b 
    [,1] [,2] [,3] 
[1,] "one" "two" "three" 

이 괜찮 작동합니다. 더 효율적인 변형이 있습니까? S.O에 관해서도 비슷한 질문을 보았습니다. 그러나 그들을 적응 시키려고 애를 썼다. Reduce를 사용하거나 R의 함수형 프로그래밍 기본 기능의 대부분은, 당신은 일반적으로 그래서 당신은 일반적으로 필요 ...에 인수를 전달할 수없는 경우

답변

6

또는 다음과 같이 :.

mapply(cbind, one, two, three) 

또는 같은:

mylist <- list(one, two, three) 
do.call(mapply, c(cbind, mylist)) 
+0

당신은 나를 놀리고 있니? 나는 첫 번째 것을 시도했지만, 분명히하지 않았다. 감사! – thelatemail

7

사용 ReduceMap (Mapmapply(..., SIMPLIFY = FALSE)

Reduce(function(x,y) Map(cbind, x, y),list(one, two,three)) 

에 대한 간단한 래퍼 인 당신이 원하는 것을 할 수있는 작은 익명 함수를 작성하는

+0

우수! 나는 'Reduce'로 경기를 가졌지 만 아무데도 빨리 뛰지 못했습니다. 감사합니다. – thelatemail

+0

+1 'Reduce'와'Map'에 대해 –

2
sep.list <- unlist(list(one, two, three), recursive = FALSE) 
lapply(split(sep.list, names(sep.list)), do.call, what = cbind) 
관련 문제