函数来计算R中重复的置换
我想生成向量的所有可能排列函数来计算R中重复的置换,r,algorithm,permutation,R,Algorithm,Permutation,我想生成向量的所有可能排列 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
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))
您可以使用
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
>xigetall(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
即使在combinat
或permute
软件包中,似乎也没有什么东西符合这一要求。这可能非常不寻常,您需要自己编写代码。我能找到的最好的名字是“用重迭排列”,我认为有些答案是C++的,所以用<代码> RCPP < /代码>很容易把它们移植过来。祝你好运不幸的是,“重复排列”被用来描述矛盾的事物。例如,如果您想使用数字0到9生成所有可能的三位数,您将生成重复排列,并获得1000个。但是,如果给你一个数字列表,其中一些是重复的,那么“重复排列”意味着不将重复的数字视为唯一的。例如,请参见。不幸的是,这个链接没有说明如何生成它们。如果你想自己实现它,你可以在谷歌上搜索“Knuth算法L”。