如何用R语言实现无重复号码的乐透随机抽取功能?
解决乐透号码抽取重复的问题
哦,我明白你遇到的问题了——用replicate循环每次抽1个号码的方式,根本没法保证整体不重复,这是因为每次sample都是独立从完整的1-39集合里抽取的,哪怕你设置了replace=FALSE,单次抽1个也起不到去重的作用呀!
为什么你的代码会失效?
- 当你使用
replicate(39, sample(1:39, 1, replace=FALSE))时,每次循环里的sample仅抽取1个数字,replace=FALSE在这里完全没用(毕竟抽1个不可能出现重复)。下一次循环还是从完整的1-39集合里抽取,所以重复是必然的结果。 - 而
replace=TRUE参数本身就允许抽取重复值,自然会出现大量重复号码。
正确的实现方式
其实不需要用replicate,直接用sample函数一次性抽取所有需要的号码即可,它会自动帮你处理去重:
示例1:抽取6个不重复的乐透号码(常见乐透规则)
# 抽取6个不重复号码,replace=FALSE是默认值,可省略 lotto_numbers <- sample(1:39, 6, replace = FALSE) # 排序让号码更易读 sort(lotto_numbers)
示例2:抽取全部39个不重复号码(随机排列)
如果你需要打乱1-39的顺序,直接抽取全部数量即可:
full_shuffled_numbers <- sample(1:39, 39, replace = FALSE)
这样得到的结果绝对不会有重复,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Kasimir
相关产品推荐
相关产品推荐

