我在对矩阵行求和时遇到问题。我有一个由 30 个矩阵组成的列表
Matrix<-matrix(1:45, ncol=9)
List<-list(lapply(seq_len(30), function(X) Matrix))
这个想法是创建 30 个大小为 5*3 的矩阵。首先,我需要对一些列进行求和,1:3
4:6
7:9
,这样结果将如下:
[,1] [,2] [,3]
[1,] 18 63 108
[2,] 21 66 111
[3,] 34 69 114
[4,] 47 72 117
[5,] 30 75 120
我正在尝试使用以下代码获取此矩阵:
Y<-lapply(List, function(x) rowSums(x[, 1:3]))
但是,它只允许我对前 3 列进行求和。
之后,我需要对列表求和并仅获得一个矩阵(5*3)。我认为命令 final<-reduce(Y,
+ )
可以提供帮助。
540 1890 3240
630 1980 3330
1020 2070 3420
1410 2160 3510
900 2250 3600
感谢您的帮助
最佳答案
您需要找到某种方法将列按三分组,例如:
grp = (1:ncol(Matrix) -1) %/% 3
或者如果您知道尺寸:
grp = rep(0:2,each=3)
要在三列中进行 rowSums,我们可以使用函数来完成此操作:
SumCols = function(M,col_grp){
sapply(unique(col_grp),function(i)rowSums(M[,col_grp==i]))
}
SumCols(Matrix,grp)
[,1] [,2] [,3]
[1,] 18 63 108
[2,] 21 66 111
[3,] 24 69 114
[4,] 27 72 117
[5,] 30 75 120
所以把它放在你的矩阵列表中,
Reduce("+",lapply(List[[1]],SumCols,grp))
[,1] [,2] [,3]
[1,] 540 1890 3240
[2,] 630 1980 3330
[3,] 720 2070 3420
[4,] 810 2160 3510
[5,] 900 2250 3600
关于R:如何在列表中应用求和函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60710486/