我想生成矢量的所有可能的排列
c(1,2,2,3,3)
在R.中我使用了以下代码:
library(combinat)
permn(c(1,2,2,3,3))
然而,这个函数产生5!= 120个排列,因为它区分了两个2和两个3.它应该生成5!/(2!* 2!)= 30个组合。
使用
解决了这个问题unique(permn(c(1,2,2,3,3)))
但是,我想要一个提供
输出的函数unique(permn(c(1,2,2,3,3)))
直接在单一功能中,不首先计算所有可能的排列
permn(c(1,2,2,3,3))
答案 0 :(得分:1)
您可以使用iterpc
包来获取它们。
> x <- c(1, 2, 2, 3, 3)
> I <- iterpc(table(x), ordered=TRUE)
> getall(I)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 2 3 3
[2,] 1 2 3 2 3
[3,] 1 2 3 3 2
[4,] 1 3 2 2 3
[5,] 1 3 2 3 2
[6,] 1 3 3 2 2
[7,] 2 1 2 3 3
[8,] 2 1 3 2 3
[9,] 2 1 3 3 2
[10,] 2 2 1 3 3
[11,] 2 2 3 1 3
[12,] 2 2 3 3 1
[13,] 2 3 1 2 3
[14,] 2 3 1 3 2
[15,] 2 3 2 1 3
[16,] 2 3 2 3 1
[17,] 2 3 3 1 2
[18,] 2 3 3 2 1
[19,] 3 1 2 2 3
[20,] 3 1 2 3 2
[21,] 3 1 3 2 2
[22,] 3 2 1 2 3
[23,] 3 2 1 3 2
[24,] 3 2 2 1 3
[25,] 3 2 2 3 1
[26,] 3 2 3 1 2
[27,] 3 2 3 2 1
[28,] 3 3 1 2 2
[29,] 3 3 2 1 2
[30,] 3 3 2 2 1