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

Why does the allPerms function in R always give one combination less?

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

当我使用 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 本身。或者任何其他功能。关于此的任何信息都将非常有用。谢谢。

您想使用 how() 辅助函数将 observed 标志设置为 TRUE

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