【发布时间】:2014-06-12 03:41:20
【问题描述】:
我想生成 n 数字的所有唯一组合,无需替换。例如n = 4,则此处显示gamma(4+1) 组合:
combos4 <- read.table(text='
x1 x2 x3 x4
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
', header = TRUE)
我可以使用以下代码获得这24种组合:
combos <- expand.grid(x1=1:4, x2=1:4, x3=1:4, x4=1:4)
my.combos <- combos[apply(combos,1,function(x) length(unique(x)) == ncol(combos)),]
my.combos
但是,我一直认为在 base R 中有一种更简单的方法。具体来说,我一直假设函数combn() 可以返回这些组合。但是,如果combn() 我现在可以意识到我不知道该怎么做。
expand.grid 方法似乎有点低效,尤其是当n 很大时。
在搜索互联网和 StackOverflow 时,我发现了几个使用 algorithm 标签的类似问题,并且在提供答案时发布的代码并不简单。抱歉,如果这是重复的,或者我遗漏了一些明显的东西。
【问题讨论】:
-
您需要了解术语“组合”和“排列”之间的区别。组合被定义为集合成员,即没有顺序,而排列有顺序。
-
@BondedDust 是的。取点。我从来没有花足够的时间研究 Casella 和 Berger。我很懒惰,认为“独特的组合”就足够了。
-
我并没有真正批评你的问题,因为你的例子清楚地表明了你想要什么。而是试图澄清有效的搜索策略可能是什么。
-
@BondedDust 我很感激。我喜欢学习,并感谢人们花时间指出我可以改进的方法。
标签: r combinations