2013-05-28 11 views
2

我期望做的是产生长度为k的n个向量,使得向量中的每个值都是一个随机数,并且不管每个向量中整数的顺序如何,都不存在重复的向量。例如,不会有矢量1,2,3和2,1,3。随机向量无论顺序

到目前为止,我有以下内容来生成一个向量,并且我计划通过此代码循环来生成n个向量。

vector<- sample(1:20000,k) 

我有一个想法是将所有向量按升序排序,然后删除重复的向量。有没有更简单/更有效的方法?

谢谢!

+0

小问题:'k'有多大? (可能会有性能影响。) – joran

+0

大。在10 000或更大的秩序 – user2379487

+0

我认为你的计划是好的。 – eddi

回答

-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 

当然这只会工作,如果组合的总数可以适应内存。虽然有方法遍历组合,只保留一些,或者生成一个整数样本,然后将它们转换为适当的组合。

如果您想要的样本数量相对于可能的组合数量较小,那么拒绝方法可能会更有效。但是,如果样本数量相对于导致大量重复的组合数量较大,则这可能会更好。

+0

样本数量相对较小:例如100,组合数量很大(从20 000取样100的方法数量)。然后,我也想将样本数量从1改变为100,所以这可能是具有挑战性的。 – user2379487