2012-12-11 4 views
1

목록의 모든 행렬을 합치고 싶습니다. 내가 그들 각각 같은 차원의 단일 행렬을 마련하기 위해 m1.l의 모든 요소를 ​​추가 할행렬 목록을 원소별로 합산합니다.

## sets up the problem 
m1 <- matrix(0,nrow=9,ncol=4) 
row.pres <- lapply(1:4,function(x) seq(x,x+2)) 
m1.l <- lapply(1:4,function(y) {m1[row.pres[[y]],y] <- 1 
         return(m1)} 
     ) 

: 여기에 내가 할 노력하고있어의 예입니다. 여기 내 해결책이 있습니다 :

test <- lapply(1:4,function(x) paste("m1.l[[",x,"]]",sep='')) 
add.all <- paste(test,collapse="+") 
eval(parse(text=add.all)) 

그러나 더 좋은 방법이 있어야합니다! 아마도 do.call을 통해 뭔가?

답변

4
> Reduce("+", m1.l) 
     [,1] [,2] [,3] [,4] 
[1,] 1 0 0 0 
[2,] 1 1 0 0 
[3,] 1 1 1 0 
[4,] 0 1 1 1 
[5,] 0 0 1 1 
[6,] 0 0 0 1 
[7,] 0 0 0 0 
[8,] 0 0 0 0 
[9,] 0 0 0 0 

이렇게하면 첫 번째 두 개가 합쳐져 ​​결과가 생성되어 세 번째 행렬이 추가됩니다. 그런 다음 전체 목록을 통해 작업 할 때까지 네 번째 행렬에 결과를 추가합니다.

+0

놀라운! 나는 실제로 이러한 기능들 (Reduce, Filter 등)에 대해 들어 보지 못했습니다. 매우 유용합니다! 매우 감사합니다! – AndrewMacDonald