Детерминированная генерация псевдослучайных чисел в R
Мне нужно сгенерировать вектор "случайных" чисел, за исключением того, что они должны быть полностью детерминированными. Распределение, из которого приходят числа, не так важно. Какой простой способ сделать это в R?
Причина не использовать что-то вроде runif
является то, что он возвращает другую последовательность каждый раз, когда он вызывается.
Причина не генерации одной последовательности (с runif
) и повторное его использование заключается в том, что вызовы осуществляются на разных машинах. Я мог бы жестко закодировать последовательность в сценарий, но длина необходимой последовательности неизвестна во время разработки, поэтому предпочтительна псевдослучайная последовательность, основанная на некотором жестко закодированном семени.
2 ответа
Знаете ли вы о set.seed()
команда?
R> set.seed(42); runif(3)
[1] 0.914806 0.937075 0.286140
R> set.seed(42); runif(3) # same seed, same numbers
[1] 0.914806 0.937075 0.286140
R> set.seed(12345); runif(3) # different seed, different numbers
[1] 0.720904 0.875773 0.760982
R>
Существует также пакет SoDa (и руководство [PDF]), которое позволяет вам обернуть другие операции и восстановить начальное и конечное начальное число. Это просто обертка вокруг set.seed()
но вы можете проверить сами (например, в модульных тестах) легче.