2

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

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

vector<- sample(1:20000,k)

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

谢谢!

4

1 回答 1

-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

当然,这只有在组合总数可以放入内存时才有效。虽然有一些方法可以迭代组合并只保留一些,或者生成一个整数样本,然后将它们转换为适当的组合。

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

于 2013-05-28T15:41:18.893 回答