【问题标题】:total number of combinations generated from sample从样本生成的组合总数
【发布时间】:2012-12-12 09:34:37
【问题描述】:

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

从这个向量不重复可以生成的组合总数是多少??

并且 sample 是否计算排列而不重复??

我正在做的是这样的:

for (i in 1:100) 
{
    test$x <- sample(test$x,nrow(test), replace=FALSE)
}

我是否有可能从 x 列的此代码中得到重复排列??

【问题讨论】:

    标签: r permutation


    【解决方案1】:
    1. 不同排列的数量应该是50!在你的例子中。
    2. 按顺序生成样本并不能保证它们的唯一性。通过重复 sample(1:3) 尝试一个小例子。
    3. 是的,您示例中的排列可能会重复。

    【讨论】:

      【解决方案2】:

      n 值的唯一排列数为n!。例如,如果您有 n = 3 值,则排列数为 3 * 2 * 1 = 6。在 R 中,这个数字可以用factorial(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"
      

      【讨论】:

        【解决方案3】:

        正如@djurhio 提到的,您的示例中的排列数为 50! (即 ca. 3e64)对于您来说太大而无法找到所有这些。但是,对于较小的样本,您可以使用包 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
        

        【讨论】:

          猜你喜欢
          • 2020-10-05
          • 2011-09-05
          • 1970-01-01
          • 2017-01-02
          • 2014-07-26
          • 1970-01-01
          • 2021-11-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多