2013-05-28 16 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