提问人:Alex 提问时间:8/14/2023 更新时间:8/14/2023 访问量:38
在函数闭包中自包含 RNG 种子
Self contained seeding of RNG in a function closure
问:
有没有办法设置一个“局部”种子,以便闭包中随机数生成器的使用只取决于这个种子?
例如
tmp_fn_test_seed <- function(seed) {
set.seed(seed)
function() {
runif(1)
}
}
以下序列不会产生相同的结果:
tmp_fn_test_seed_1 <-
tmp_fn_test_seed(1000)
tmp_fn_test_seed_2 <-
tmp_fn_test_seed(1000)
tmp_fn_test_seed_1()
tmp_fn_test_seed_2()
相反,我得到:
> tmp_fn_test_seed_1()
[1] 0.3278787
> tmp_fn_test_seed_2()
[1] 0.7588465
答:
2赞
Roland
8/14/2023
#1
这样的事情对你有用吗?
tmp_fn_test_seed <- function(seed) {
function() {
old.seed <- .Random.seed
on.exit(.GlobalEnv$.Random.seed <- old.seed)
set.seed(seed)
runif(1)
}
}
tmp_fn_test_seed_1 <-
tmp_fn_test_seed(1000)
tmp_fn_test_seed_2 <-
tmp_fn_test_seed(1000)
r1 <- .Random.seed
tmp_fn_test_seed_1()
#[1] 0.3278787
r2 <- .Random.seed
tmp_fn_test_seed_2()
#[1] 0.3278787
r3 <- .Random.seed
#"global" RNG state doesn't change
all.equal(r1, r2)
all.equal(r1, r3)
评论
0赞
Alex
8/14/2023
withr
看起来不错。我将不得不阅读更多关于它的信息。我也对这个答案投了赞成票。
评论