在R中重复计算排列的函数

时间:2017-11-10 16:55:28

标签: 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))

1 个答案:

答案 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