获取每个可能的行组合的 colsum

JmO*_*JmO 0 r permutation

您好,我有一个问题,即如何总结每一种可能的行组合。

考虑我有矩阵:

M<-replicate(5, rnorm(10))
Run Code Online (Sandbox Code Playgroud)

现在我想要一个通用的解决方案来将colSums向量保存在所有可能的行组合的列表或数据框中:例如一些例子:

第 1 行 + 第 2 行的列

第 1 行 + 第 3 行的 colsum ..

第 2 行 + 第 3 行

第 2 行 + 第 4 行 ..

第 1 行 + 第 2 行 + 第 3 行 ..

第 4 行 + 第 7 行 + 第 10 行 ...

第1行+第2行+第3行+第4行+第5行+第6行+第7行+第8行+第9行+第10行

有谁知道解决方案?非常感谢

Ben*_*ker 5

set.seed(101)
M <- replicate(5, rnorm(10))
Run Code Online (Sandbox Code Playgroud)

一个函数,用于获取一组指定的列总和向量(并标记哪些行被求和)

cs <- function(cc) colSums(M[cc,])
Run Code Online (Sandbox Code Playgroud)

用第 1 行和第 2 行测试一下:

cs(c(1,2))
##         1         2 
##  2.450401 -4.396749 
Run Code Online (Sandbox Code Playgroud)

这将获得所有 N 路组合:

csN <- function(N) {
     cc <- combn(1:nrow(M),N,FUN=cs,simplify=FALSE)
     names(cc) <- combn(1:nrow(M),N,FUN=paste,collapse=",")
     return(cc)
}
Run Code Online (Sandbox Code Playgroud)

这会列出所有组合并将它们粘在一起......

do.call("c",lapply(2:nrow(M),csN))
## quote function name for safety (fails if a vble called c exists)

## $`1,2`
## [1]  0.2264254 -0.2683963  0.5447664  1.1740892  1.2406726
## 
## $`1,3`
## [1] -1.0009803  1.9542036 -0.4317362  1.9028030 -1.8368686
## 
## ...
##
## $`2,3,4,5,6,7,8,9,10`
## [1]  2.7764374 -4.9231973 -0.3762125 -0.4554264 -4.6341908
## 
## $`1,2,3,4,5,6,7,8,9,10`
## [1]  2.4504010 -4.3967492 -0.5399682  0.4395108 -4.1517320
Run Code Online (Sandbox Code Playgroud)

  • 这似乎计算列的组合而不是行。我想如果行然后`lapply(2:nrow(M), function(x) combn(nrow(M), x, FUN=function(y) colSums(M[y, ]),simple=FALSE))`可以如果其他情况下工作 (2认同)