Có một cách hiệu quả mối quan hệ một chiều giữa các hạt giống được sử dụng trong set.seed()
và thông tin trong .Random.seed
; như ?Random.seed
nói và @ MattTenenbaum của câu trả lời cho thấy, các thông tin trong .Random.seed
có thể được lưu và phục hồi. Tôi đánh giá cao mong muốn cho một chức năng đó sẽ lấy được một hạt giống số nguyên đơn giản từ trạng thái hiện tại của .Random.seed
, nhưng trong sự vắng mặt của nó, bạn cần phải lưu và khôi phục thông tin đầy đủ ... ví dụ
set.seed(1001)
save(".Random.seed",file="random_state_seed1001.RData") ## save current state
runif(1)
## [1] 0.9856888
runif(1)
## [1] 0.4126285
runif(1)
## [1] 0.4295392
load("random_state_seed1001.RData") ## restore state just after set.seed()
runif(1)
## [1] 0.9856888
Như @JoshuaUlrich chỉ ra, đây chỉ hoạt động/chỉ an toàn nếu bạn không sửa đổi các loại RNG (và loại máy phát điện đi chệch bình thường) giữa tiết kiệm và khôi phục ...
Một giải pháp hoàn chỉnh hơn:
save_rng <- function(savefile=tempfile()) {
if (exists(".Random.seed")) {
oldseed <- get(".Random.seed", .GlobalEnv)
} else stop("don't know how to save before set.seed() or r*** call")
oldRNGkind <- RNGkind()
save("oldseed","oldRNGkind",file=savefile)
invisible(savefile)
}
restore_rng <- function(savefile) {
load(savefile)
do.call("RNGkind",as.list(oldRNGkind)) ## must be first!
assign(".Random.seed", oldseed, .GlobalEnv)
}
Hãy dùng thử:
set.seed(101)
RNGstore <- save_rng() ## save file name
runif(1)
## [1] 0.3721984
runif(10)
## [1] 0.04382482 0.70968402 0.65769040 0.24985572 0.30005483 0.58486663
## [7] 0.33346714 0.62201196 0.54582855 0.87979573
restore_rng(RNGstore)
runif(1)
## [1] 0.3721984
Xem thêm: http://www.cookbook-r.com/Numbers/Saving_the_state_of_the_random_number_generator/
Nguồn
2012-12-21 21:44:59
Nó sẽ không đơn giản hơn để làm 'hạt giống <- 123456; set.seed (seed) 'và sau đó in ra và lưu trữ giá trị của' seed'? – joran
Có, nhưng tôi sẽ bình luận ra dòng mã khi tôi không có một hạt giống cụ thể mà tôi muốn bắt đầu. –
trong sự công bằng, có rất nhiều thông tin trong trang đó ... –