Установка семян локально (не глобально) в R
Я хотел бы установить семена в R только локально (внутри функций), но кажется, что R устанавливает семена не только локально, но и глобально. Вот простой пример того, что я пытаюсь (не) делать.
myfunction <- function () {
set.seed(2)
}
# now, whenever I run the two commands below I'll get the same answer
myfunction()
runif(1)
Итак, мои вопросы: почему R задает семя глобально, а не только внутри моей функции? И как я могу заставить R установить семя только внутри моей функции?
Ответы
Ответ 1
Что-то вроде этого делает это для меня:
myfunction <- function () {
old <- .Random.seed
set.seed(2)
res <- runif(1)
.Random.seed <<- old
res
}
Или, может быть, более элегантно:
myfunction <- function () {
old <- .Random.seed
on.exit( { .Random.seed <<- old } )
set.seed(2)
runif(1)
}
Например:
> myfunction()
[1] 0.1848823
> runif(1)
[1] 0.3472722
> myfunction()
[1] 0.1848823
> runif(1)
[1] 0.4887732