2012-12-11 156 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