我想编写一个函数,对n 个彩票进行抽样,每个彩票有6 个号码,从1 到 45,每个号码都没有替换。但是,我需要有效地执行此操作,这意味着没有循环或类似循环的函数。(我想 Rcpp 也可以工作,但我更喜欢基 R 中的矢量化解决方案)
无限制求解:
lottery_inef <- function(n){
t(replicate(n,
sample(1:45, 6)))
}
Run Code Online (Sandbox Code Playgroud)
所以在这里我得到一个矩阵,其中每一行对应一张彩票。现在,如果我想模拟数百万张彩票,这会变得非常慢,因此我对矢量化解决方案感兴趣。
我的想法是:
lottery_ef <- function(n){
m <- matrix(sample(1:45, n*6, replace = TRUE), ncol = 6)
# somehow subset the matrix without a loop to remove all the
# rows that have non-unique values as in the lottery we can only draw each number once
}
Run Code Online (Sandbox Code Playgroud)
对于高效版本,我在没有循环或 apply() 的子集点上有点迷失。如果有人可以解决这个子集问题,或者为我指出一个完全不同的方向,这将引导我找到解决方案,我将不胜感激。