R n个数的所有组合

R n个数的所有组合,r,combinations,R,Combinations,我想生成所有唯一的n数字组合,无需替换。例如,如果n=4,则此处显示了伽马(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

我想生成所有唯一的
n
数字组合,无需替换。例如,如果
n=4
,则此处显示了
伽马(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)

combos4
gtools
具有一个
排列
功能,可能有助于:

library(gtools)
permutations(4,4,1:4)
##       [,1] [,2] [,3] [,4]
##  [1,]    1    2    3    4
##  [2,]    1    2    4    3
##  [3,]    1    3    2    4
##  [4,]    1    3    4    2
##  [5,]    1    4    2    3
##  [6,]    1    4    3    2
##  [7,]    2    1    3    4
##  [8,]    2    1    4    3
##  [9,]    2    3    1    4
## [10,]    2    3    4    1
## [11,]    2    4    1    3
## [12,]    2    4    3    1
## [13,]    3    1    2    4
## [14,]    3    1    4    2
## [15,]    3    2    1    4
## [16,]    3    2    4    1
## [17,]    3    4    1    2
## [18,]    3    4    2    1
## [19,]    4    1    2    3
## [20,]    4    1    3    2
## [21,]    4    2    1    3
## [22,]    4    2    3    1
## [23,]    4    3    1    2
## [24,]    4    3    2    1
而且跑得很快:

   user  system elapsed 
  0.001   0.000   0.000 

gtools
具有一个
permutations
功能,可以帮助:

library(gtools)
permutations(4,4,1:4)
##       [,1] [,2] [,3] [,4]
##  [1,]    1    2    3    4
##  [2,]    1    2    4    3
##  [3,]    1    3    2    4
##  [4,]    1    3    4    2
##  [5,]    1    4    2    3
##  [6,]    1    4    3    2
##  [7,]    2    1    3    4
##  [8,]    2    1    4    3
##  [9,]    2    3    1    4
## [10,]    2    3    4    1
## [11,]    2    4    1    3
## [12,]    2    4    3    1
## [13,]    3    1    2    4
## [14,]    3    1    4    2
## [15,]    3    2    1    4
## [16,]    3    2    4    1
## [17,]    3    4    1    2
## [18,]    3    4    2    1
## [19,]    4    1    2    3
## [20,]    4    1    3    2
## [21,]    4    2    1    3
## [22,]    4    2    3    1
## [23,]    4    3    1    2
## [24,]    4    3    2    1
而且跑得很快:

   user  system elapsed 
  0.001   0.000   0.000 

combinat
包具有
permn
功能

library(combinat)
permn(1:4)

> permn(1:4)
[[1]]
[1] 1 2 3 4

[[2]]
[1] 1 2 4 3

[[3]]
[1] 1 4 2 3

[[4]]
[1] 4 1 2 3

[[5]]
[1] 4 1 3 2

[[6]]
[1] 1 4 3 2

[[7]]
[1] 1 3 4 2

[[8]]
[1] 1 3 2 4

[[9]]
[1] 3 1 2 4

[[10]]
[1] 3 1 4 2

[[11]]
[1] 3 4 1 2

[[12]]
[1] 4 3 1 2

[[13]]
[1] 4 3 2 1

[[14]]
[1] 3 4 2 1

[[15]]
[1] 3 2 4 1

[[16]]
[1] 3 2 1 4

[[17]]
[1] 2 3 1 4

[[18]]
[1] 2 3 4 1

[[19]]
[1] 2 4 3 1

[[20]]
[1] 4 2 3 1

[[21]]
[1] 4 2 1 3

[[22]]
[1] 2 4 1 3

[[23]]
[1] 2 1 4 3

[[24]]
[1] 2 1 3 4

combinat
包具有
permn
功能

library(combinat)
permn(1:4)

> permn(1:4)
[[1]]
[1] 1 2 3 4

[[2]]
[1] 1 2 4 3

[[3]]
[1] 1 4 2 3

[[4]]
[1] 4 1 2 3

[[5]]
[1] 4 1 3 2

[[6]]
[1] 1 4 3 2

[[7]]
[1] 1 3 4 2

[[8]]
[1] 1 3 2 4

[[9]]
[1] 3 1 2 4

[[10]]
[1] 3 1 4 2

[[11]]
[1] 3 4 1 2

[[12]]
[1] 4 3 1 2

[[13]]
[1] 4 3 2 1

[[14]]
[1] 3 4 2 1

[[15]]
[1] 3 2 4 1

[[16]]
[1] 3 2 1 4

[[17]]
[1] 2 3 1 4

[[18]]
[1] 2 3 4 1

[[19]]
[1] 2 4 3 1

[[20]]
[1] 4 2 3 1

[[21]]
[1] 4 2 1 3

[[22]]
[1] 2 4 1 3

[[23]]
[1] 2 1 4 3

[[24]]
[1] 2 1 3 4

还有
iterpc

> I = iterpc(4, ordered=TRUE)
> getall(I)
      [,1] [,2] [,3] [,4]
 [1,]    1    2    3    4
 [2,]    1    2    4    3
 [3,]    1    3    2    4
 [4,]    1    3    4    2
 [5,]    1    4    2    3
 [6,]    1    4    3    2
 [7,]    2    1    3    4
 [8,]    2    1    4    3
 [9,]    2    3    1    4
[10,]    2    3    4    1
...
您也可以迭代地进行

> getnext(I)
[1] 1 2 3 4
> getnext(I)
[1] 1 2 4 3
> getnext(I)
[1] 1 3 2 4
> getnext(I)
[1] 1 3 4 2

还有
iterpc

> I = iterpc(4, ordered=TRUE)
> getall(I)
      [,1] [,2] [,3] [,4]
 [1,]    1    2    3    4
 [2,]    1    2    4    3
 [3,]    1    3    2    4
 [4,]    1    3    4    2
 [5,]    1    4    2    3
 [6,]    1    4    3    2
 [7,]    2    1    3    4
 [8,]    2    1    4    3
 [9,]    2    3    1    4
[10,]    2    3    4    1
...
您也可以迭代地进行

> getnext(I)
[1] 1 2 3 4
> getnext(I)
[1] 1 2 4 3
> getnext(I)
[1] 1 3 2 4
> getnext(I)
[1] 1 3 4 2

你需要学习术语“组合”和“排列”之间的区别。组合被定义为集合成员,即没有顺序,而置换有顺序。@BondedDust Yes。我明白了。我从来没有花足够的时间研究卡塞拉和伯杰。我很懒,觉得“独特的组合”已经足够好了。我并不是真的批评你的问题,因为你的例子清楚地说明了你想要什么。而是试图澄清有效的搜索策略可能是什么。我喜欢学习,也很欣赏人们花时间指出我可以改进的方法。你需要了解“组合”和“排列”这两个术语之间的区别。组合被定义为集合成员,即没有顺序,而置换有顺序。@BondedDust Yes。我明白了。我从来没有花足够的时间研究卡塞拉和伯杰。我很懒,觉得“独特的组合”已经足够好了。我并不是真的批评你的问题,因为你的例子清楚地说明了你想要什么。而是试图澄清有效的搜索策略可能是什么。我喜欢学习,并欣赏人们花时间指出我可以改进的方法。