R bỏ qua cài đặt .Random.seed
bên trong của một lapply. Tuy nhiên, sử dụng set.seed
, hoạt động tốt.Làm thế nào tôi có thể nhận được R's lapply (và mclapply) để khôi phục trạng thái của trình tạo số ngẫu nhiên?
Một số mã:
# I can save the state of the RNG for a few seeds
seed.list <- lapply(1:5, function(x) {
set.seed(x)
seed.state <- .Random.seed
print(rnorm(1))
return(seed.state)})
#[1] -0.6264538
#[1] -0.8969145
#[1] -0.9619334
# But I get different numbers if I try to restore
# the state of the RNG inside of an lapply
tmp.rest.state <- lapply(1:5, function(x) {
.Random.seed <- seed.list[[x]]
print(rnorm(1))})
# [1] -0.2925257
# [1] 0.2587882
# [1] -1.152132
# lapply is just ignoring the assignment of .Random.seed
.Random.seed <- seed.list[[3]]
print(rnorm(1)) # The last printed value from seed.list
# [1] -0.9619334
print(rnorm(1)) # The first value in tmp.rest.state
# [1] -0.2925257
Mục tiêu của tôi là để trạm kiểm soát MCMC chạy để họ có thể được nối lại một cách chính xác. Tôi có thể dễ dàng lưu trạng thái của RNG, tôi không thể lấy R để tải nó bên trong một vòng lặp lapply!
Có cách nào buộc R phải thông báo đặt .Random.seed
không? Hoặc có cách nào đơn giản hơn để thực hiện điều này không?
Trong trường hợp vấn đề, tôi đang sử dụng 64 bit R:
R version 2.15.1 (2012-06-22) -- "Roasted Marshmallows"
Platform: x86_64-pc-linux-gnu (64-bit)
Trên Ubuntu 12.04 LTS:
[email protected]:~$ uname -a
Linux nathanvan-N61Jq 3.2.0-26-generiC#41-Ubuntu SMP Thu Jun 14 17:49:24 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
+1 Câu hỏi rất thú vị, cảm ơn bạn – Andrie