2

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

当我使用 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 本身。或任何其他功能。这方面的任何信息都将非常有用。谢谢你。

4

1 回答 1

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默认的?嗯,这是故意的,因为整个包是从限制置换测试的角度设计的,这在生态学中的排序方法的应用中很常见。鉴于我们已经有了观察到的排列,即数据,我们不希望它出现在用于定义检验统计量的零分布的排列中;我们做得很好,但只是通过观察到的数据,而不是在排列过程中可能出现的任何额外数据。

于 2016-02-26T19:55:49.097 回答