2012-12-11 202 views
1

我想將列表中的所有矩陣相加。這裏是什麼,我試圖做一個例子:將元素列表逐個添加到元素

## 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)} 
     ) 

我要加起來的m1.l所有元素來與尺寸相同它們中的每一個矩陣。這是我的解決方案:

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

不可思議!我從來沒有聽說過任何這些功能(減少,過濾等)非常有用!非常感謝! – AndrewMacDonald