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