您好,我有一个问题,即如何总结每一种可能的行组合。
考虑我有矩阵:
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行
有谁知道解决方案?非常感谢
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)