小编Pro*_*ino的帖子

在 R 中有效地采样彩票号码

我想编写一个函数,对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() 的子集点上有点迷失。如果有人可以解决这个子集问题,或者为我指出一个完全不同的方向,这将引导我找到解决方案,我将不胜感激。

r function sampling

3
推荐指数
1
解决办法
237
查看次数

标签 统计

function ×1

r ×1

sampling ×1