我正在Reddit AskScience回答一个问题,与runif()
的功能相关的事情让我感到奇怪。我试图从1到52中均匀地抽取一组样本。我的第一个想法是使用runif():
as.integer(runif(n, min = 1, max = 52))
然而,我发现这个操作从未产生过值为52的结果。例如:
length(unique(as.integer(runif(1000000, 1, 52))))
[1] 51
针对我的需求,我只是转而使用sample()
:
sample(52, n, replace = TRUE)
在runif()的文档中,它声明:
runif不会生成极端值,除非max = min或max-min与min相比较小,特别是对于默认参数不会生成。
我想知道为什么runif()会这样。如果它试图均匀生成样本,似乎应该能够从集合中产生“极端值”。这是一个特性,为什么?
52.000000…
。 - Mariusrunif
兼容的替代方法是ceiling(runif(100, min = 0, max = 52))
。 - lmo