R:如何在列表中应用求和函数?

标签 r matrix sum

我在对矩阵行求和时遇到问题。我有一个由 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/

相关文章:

r - 如何将循环与geom_vline和facet_wrap一起使用?

r - 如何在单元测试中重用示例?

按行顺序替换上三角矩阵元素

python - 如何检查矩阵是否在矩阵列表中 Python

c - 如何使用动态内存分配将元素分配给矩阵?

python 在每个索引处对数组中的所有先前值求和

sql - 单个 ID 上的列拆分总和

Python 一行

r - 在 r 中创建一个带有 FUN 输入的函数

r - 将 Tibble 转换为参数列表