得到每个可能行组合的colsum

时间:2017-06-03 22:22:25

标签: r permutation

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

考虑我有矩阵:

M<-replicate(5, rnorm(10))

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

第1行+第2行的

colsum

第1行+第3行的colsum ..

第2行+第3行

第2行+第4行 ..

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

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

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

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

1 个答案:

答案 0 :(得分:4)

set.seed(101)
M <- replicate(5, rnorm(10))

获取指定的一组的列和的向量的函数(并标记哪些行的求和)

cs <- function(cc) colSums(M[cc,])

使用第1行和第2行测试:

cs(c(1,2))
##         1         2 
##  2.450401 -4.396749 

这将获得所有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)
}

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

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