R 从样本生成的组合总数
在R中有一个50个数的向量,我使用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)
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)太大,您无法找到所有排列数。但是,对于较小的示例,您可以使用packagepermute
中的函数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
测试