R 从样本生成的组合总数

R 从样本生成的组合总数,r,permutation,R,Permutation,在R中有一个50个数的向量,我使用sample()生成这个向量的置换,但我的问题是: 从该向量中不重复生成的组合总数是多少 sample计算排列是否不重复 我所做的是这样的: for (i in 1:100) { test$x <- sample(test$x,nrow(test), replace=FALSE) } for(1:100中的i) { 测试$x 在你的例子中,不同排列的数量应该是50 按顺序生成样本不能保证它们的唯一性。请尝试一个小示例,重复sample(1:3)

在R中有一个50个数的向量,我使用
sample()
生成这个向量的置换,但我的问题是:

从该向量中不重复生成的组合总数是多少

sample计算排列是否不重复

我所做的是这样的:

for (i in 1:100) 
{
    test$x <- sample(test$x,nrow(test), replace=FALSE)
}
for(1:100中的i)
{
测试$x
  • 在你的例子中,不同排列的数量应该是50
  • 按顺序生成样本不能保证它们的唯一性。请尝试一个小示例,重复
    sample(1:3)
  • 是的,您的示例中的排列可能会重复

  • n
    值的唯一排列数是
    n!
    。如果您有,例如
    n=3
    值,排列数是
    3*2*1=6
    。在R中,这个数字可以用
    阶乘(n)
    计算

    函数
    sample
    的不同运行是独立的。因此,可以获得相同的排列

    如果要生成一组值的所有排列,可以使用
    gregmisc
    包中的函数
    permutations
    。以下是一个示例:

    # generate a vector of values  
    dat <- letters[1:3] # [1] "a" "b" "c"
    
    # the number of values to be drawn from the vector
    n_samp <- 2 # Note. The maximum number is: length(dat)
    
    library(gregmisc)
    
    # generate the permutations
    permutations(length(dat), n_samp, v = dat)
    
    # The result:
    
        [,1] [,2]
    [1,] "a"  "b" 
    [2,] "a"  "c" 
    [3,] "b"  "a" 
    [4,] "b"  "c" 
    [5,] "c"  "a" 
    [6,] "c"  "b"
    
    #生成值向量
    
    dat正如@djurhio所提到的,您的示例中的排列数为50!(即约3e64)太大,您无法找到所有排列数。但是,对于较小的示例,您可以使用package
    permute
    中的函数
    allPerms

    test<-data.frame(x=round(rnorm(5),2)
    test
       x
    1  0.33
    2  0.34
    3  2.18
    4  0.92
    5 -0.29
    library(permute)
    t(apply(allPerms(test$x),1,function(X)test$x[X]))
            [,1]  [,2]  [,3]  [,4]  [,5]
      [1,]  0.33  0.34  2.18 -0.29  0.92
      [2,]  0.33  0.34  0.92  2.18 -0.29
                        ...
    [118,] -0.29  0.92  2.18  0.33  0.34
    [119,] -0.29  0.92  2.18  0.34  0.33
    
    测试