我有一个矩阵列表,例如list(M1,M2,M3,M4)
我想获得一个矩阵,其中添加所有矩阵M1+M2+M3+M4
并将每行除以rowSums(M1)+rowSums(M2)+rowSums(M3)+rowSums(M4)
。
这是一个示例列表,
lst <- list(M1 = matrix(c(1,4,2,5), 2, 2), M2 = matrix(c(2,6,3,7), 2, 2))
lst
#> $M1
#> [,1] [,2]
#> [1,] 1 2
#> [2,] 4 5
#>
#> $M2
#> [,1] [,2]
#> [1,] 2 3
#> [2,] 6 7
我想要的结果是什么,
(1+2)/((2+1)+(2+3)) = 0.375 (2+3)/((2+1)+(2+3)) = 0.625
(4+6)/((6+7)+(4+5)) = 0.4545455 (5+7)/((6+7)+(4+5)) = 0.5454545
答案 0 :(得分:5)
我们可以尝试
Reduce(`+`, lst)/ sum(sapply(lst, rowSums))
或
Reduce(`+`, lst)/ sum(unlist(lst))
基于OP的更新(使用OP的数据集)
Reduce(`+`, lst)/rowSums(sapply(lst, rowSums))
# [,1] [,2]
#[1,] 0.3750000 0.6250000
#[2,] 0.4545455 0.5454545
lst <- list(matrix(1:16, 4, 4), matrix(1:16, 4, 4))
答案 1 :(得分:3)
您可以使用三维数组和apply()
M1 <- matrix(c(1,4,2,5), 2)
M2 <- matrix(c(2,6,3,7), 2)
L <- list(M1, M2)
M <- array(unlist(L), dim=c(2,2,2)) # or: M <- array(c(M1, M2), dim=c(2,2,2))
apply(M, 1:2, sum) / apply(M, 1, sum)
# > apply(M, 1:2, sum) / apply(M, 1, sum)
# [,1] [,2]
# [1,] 0.3750000 0.6250000
# [2,] 0.4545455 0.5454545
和rowSums表示法(thx到user20650):
rowSums(M, dims=2) / rowSums(M)