为什么R中的allPerms函数总是减少一个组合?

时间:2016-02-26 14:06:21

标签: r permutation permute

我试图找到一个数字的所有可能组合,即基本上是数字的阶乘,但也显示所有可能的组合。

当我使用allPerms函数时,我应该得到所有可能的组合,但它总是给出一个组合。为什么会这样?

library(permute)
allPerms(3)
     [,1] [,2] [,3]
[1,]    1    3    2
[2,]    2    1    3
[3,]    2    3    1
[4,]    3    1    2
[5,]    3    2    1

allPerms(4)
      [,1] [,2] [,3] [,4]
 [1,]    1    2    4    3
 [2,]    1    3    2    4
 [3,]    1    3    4    2
 [4,]    1    4    2    3
 [5,]    1    4    3    2
 [6,]    2    1    3    4
 [7,]    2    1    4    3
 [8,]    2    3    1    4
 [9,]    2    3    4    1
[10,]    2    4    1    3
[11,]    2    4    3    1
[12,]    3    1    2    4
[13,]    3    1    4    2
[14,]    3    2    1    4
[15,]    3    2    4    1
[16,]    3    4    1    2
[17,]    3    4    2    1
[18,]    4    1    2    3
[19,]    4    1    3    2
[20,]    4    2    1    3
[21,]    4    2    3    1
[22,]    4    3    1    2
[23,]    4    3    2    1

正如您所看到的,两种情况的123和1234的最初组合分别缺失。

我知道我可以使用combinat包中的permn()函数获得所有可能的组合。

我只是想知道是否有办法将allPerms本身用于此目的。或任何其他功能。任何关于此的信息都非常有用。谢谢。

1 个答案:

答案 0 :(得分:3)

您希望使用observed辅助函数将TRUE标记设置为how()

h <- how(observed = TRUE)
allPerms(3, h)

> h <- how(observed = TRUE)
> allPerms(3, h)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    1    3    2
[3,]    2    1    3
[4,]    2    3    1
[5,]    3    1    2
[6,]    3    2    1

为什么observed = FALSE是默认值?嗯,这是故意的,因为整个包装是从限制排列测试的角度设计的,这种排列测试在生态学中的排序方法的应用中是常见的。鉴于我们已经有了观察到的排列,数据,我们不希望它在用于定义测试统计量的空分布的排列中;我们做得很好,但只能通过观察到的数据,而不是排列期间可能出现的任何额外数据。