我要做的是生成长度为k的n个向量,使得向量中的每个值都是随机数,并且不管每个向量中整数的顺序如何,都没有重复的向量。例如,不会有矢量1,2,3和2,1,3。
到目前为止,我所拥有的是生成一个向量的以下内容,我正计划循环遍历此代码以生成n个向量。
vector<- sample(1:20000,k)
我的一个想法是按升序对所有向量进行排序,然后删除重复的向量。是否有更简单/更有效的方式?
谢谢!
答案 0 :(得分:-1)
一种方法是生成所有可能的组合,然后从该组中进行选择。这样可以保证没有重复:
> 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
当然,只有当组合的总数适合内存时,这才有效。虽然有办法迭代组合并只保留一些,或生成整数样本,然后将它们转换为适当的组合。
如果您想要的样本数量相对于可能组合的数量较小,那么拒绝方法可能会更有效。但是,如果样本数量相对于导致大量重复的组合数量较大,则可以更好地工作。