gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:24:00 25 4
gpt4 key购买 nike

我在对矩阵的行求和时遇到问题。我有一个由 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:如何在列表中应用 sum 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60710486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com