0

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

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

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

我正在做的是这样的:

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

有没有可能我可以从 x 列的这段代码中得到重复的排列?

4

3 回答 3

1

值的唯一排列数nn!。例如,如果您有n = 3值,则排列数为3 * 2 * 1 = 6。在 R 中,这个数字可以用 来计算factorial(n)

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

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

# 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"
于 2012-12-12T10:00:27.477 回答
1
  1. 不同排列的数量应该是50!在你的例子中。
  2. 按顺序生成样本并不能保证它们的唯一性。通过重复尝试一个小例子sample(1:3)
  3. 是的,您示例中的排列可能会重复。
于 2012-12-12T09:51:01.387 回答
0

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

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
于 2012-12-12T10:00:42.377 回答