我刚刚生成了从 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)
收到的答案都是正确的。我只是指出,%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)
| 归档时间: |
|
| 查看次数: |
1939 次 |
| 最近记录: |