我要做的是生成 n 个长度为 k 的向量,使得向量中的每个值都是一个随机数,并且无论每个向量中整数的顺序如何,都没有重复的向量。例如,向量 1,2,3 和 2,1,3 不会同时存在。
到目前为止,我有以下内容来生成一个向量,并且我计划循环遍历此代码以生成 n 个向量。
vector<- sample(1:20000,k)
我的一个想法是按升序对所有向量进行排序,然后删除重复的向量。有没有更简单/更有效的方法?
谢谢!
一种方法是生成所有可能的组合,然后从该集合中进行选择。这将保证没有重复:
> tmp <- combn(100, 3)
> dim(tmp)
[1] 3 161700
> tmp[ , sample( ncol(tmp), 10 ) ]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 34 35 28 3 3 29 8 24 50 53
[2,] 54 54 63 57 17 86 31 30 52 81
[3,] 97 79 87 92 53 94 90 83 87 97
当然,这只有在组合总数可以放入内存时才有效。虽然有一些方法可以迭代组合并只保留一些,或者生成一个整数样本,然后将它们转换为适当的组合。
如果您想要的样本数量相对于可能组合的数量很小,那么拒绝方法可能会更有效。但是,如果样本数量相对于会导致大量重复的组合数量较大,这可能会更好。