Я был ответил на вопрос, заданный в 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()
действует таким образом. Похоже, что он должен иметь возможность создавать "экстремальные значения" из набора, если он пытается равномерно сгенерировать выборки. Является ли это особенностью и почему?