我想在列表中添加所有矩阵。这是我正在尝试做的一个例子:
## 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
?
答案 0 :(得分: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
这会将前两个加在一起,然后它将获取结果并向其添加第三个矩阵。然后它会将结果添加到第四个矩阵等,直到它在整个列表中运行。