R использует .Random.seed
из глобальной среды , поэтому вы должны назначить его там: назначение его в функциональной среде не будет работать (как вы видели).
small_loop2<-sapply(2:3,function(i) {
assign(".Random.seed",readRDS(paste0("run_",i,".RDS")),
envir=.GlobalEnv)
sample(letters,1)
})
small_loop2
## [1] "f" "i"
big_loop
## [1] "o" "f" "i" "s" "v"
Другое, немного более удобное решение этой проблемы состоит в том, чтобы последовательно задавать начальное значение в пределах при каждом запуске:
big_loop<-sapply(1:5,function(i) {
set.seed(22+i)
sample(letters,1)
})
small_loop<-sapply(2:3,function(i) {
set.seed(22+i)
sample(letters,1)
})
Таким образом, вы можете воспроизводить результаты, не перемещая громоздкое содержимое.Random.seed
вокруг ...
Рекомендуются последовательные семена здесь ;очевидно, что SQL RAND()
является ненадежным, если он заполнен последовательными значениями , но я не думаю, что это проблема с генераторами R ...