乐透功能与 R

Nik*_*ola 3 simulation r

我刚刚生成了从 1 到 39 的 10 个随机乐透号码,现在我想检查这些号码是否与我的中奖彩票匹配,例如 w<-c(2,8,19,23,25,32,37),如果我有 3 个特定组合的匹配,则奖金为 10 美元 4 50 美元 5 100 美元6 2000 美元和所有 7 100000 美元。

    set.seed(99)
    y <- replicate(10,sample(1:39,7,replace=FALSE))
    dimnames(y) <- list(rownames(y,do.NULL=FALSE,prefix=""),
                        colnames(y,do.NULL=FALSE,prefix="Combination"))
    m <- t(y)
    (m2 <- t(apply(m,1,sort)))

                   [,1] [,2] [,3] [,4] [,5] [,6] [,7]
    Combination1     5   19   23   26   33   36   39
    Combination2     7   12   14   18   20   22   37
    Combination3     4    7    8   14   25   27   36
    Combination4     1    4   13   22   27   28   32
    Combination5     1    2    8   12   13   19   37
    Combination6    16   18   22   27   30   31   35
    Combination7    13   15   18   20   31   34   36
    Combination8     5   10   27   28   29   31   35
    Combination9     4   10   14   21   23   33   35
    Combination10    1   17   20   28   29   32   33
Run Code Online (Sandbox Code Playgroud)

nic*_*ola 5

收到的答案都是正确的。我只是指出,%in%is.element基本相同的功能。但是,不需要任何apply. 请记住,与矢量化的内部 R 函数相比,它apply只是隐藏了一个for循环并且非常慢。我只是建议:

  rowSums(matrix(m %in% w, ncol=ncol(m)))
Run Code Online (Sandbox Code Playgroud)

这可以更快:

  m<-t(replicate(100000,sample(39,7)))
  system.time(res<-apply(m,1,function(x) sum(x%in%w)))
  #  user  system elapsed 
  # 0.584   0.000   0.587
  system.time(res2<-rowSums(matrix(m %in% w, ncol=ncol(m))))
  #  user  system elapsed 
  # 0.036   0.004   0.040 
  all.equal(res,res2)
  #[1] TRUE
Run Code Online (Sandbox Code Playgroud)