Во время недавнего расследования в установление случайных семян внутри функций я столкнулся с нечетной ситуацией. Рассмотрим функции f
и g
, каждый из которых устанавливает случайное семя, а затем выполняет простую рандомизированную операцию:
g <- function(size) { set.seed(1) ; runif(size) }
f <- function(x) { set.seed(2) ; x*runif(length(x)) }
Поскольку каждая функция устанавливает случайное семя, я бы ожидал, что каждая функция всегда будет иметь одинаковое возвращаемое значение, учитывая тот же ввод. Это означает, что f(g(2))
должен возвращать то же самое, что и x <- g(2) ; f(x)
. К моему удивлению, это не так:
f(g(2))
# [1] 0.1520975 0.3379658
x <- g(2)
f(x)
# [1] 0.04908784 0.26137017
Что здесь происходит?