我有一个长度不同的序列,例如:
items <- 1:4
我想把它分成每组可能的组合n
。所以说n
是两个,我想返回:
Set A Set B
----- -----
1 2 3 4
1 2 3 4
1 2 3 4
1 3 2 4
等等。集合内的排列并不重要,即集合 { 1
, 2
, 3
} 与 { 2
, 1
, 3
} 相同。集合不能为空。
我能想到的最好的(使用permn
包中的combinat
)是:
n <- 2
r <- 1:length(items)
arrangements <- NULL
for (i in 1:(n-1)) {
A <- r[(1:i)]
B <- r[-(1:i)]
arrangements <- c(arrangements, apply(do.call(rbind, permn(1:length(items))), 1, function(z) list(z[A], z[B])))
}
这是相当无用的,因为它返回相等的集合,即 { 1
, 2
, 3
} 和 { 2
, 1
, 3
} 并且不够灵活以处理n
. 有人知道我该怎么做吗?谢谢。