[英]R: set.seed produces the same result after seed removal
背景。 我想在R v.3.5.0
的for周期内生成随机序列。 为此,我使用下面的代码:
rm(.Random.seed, envir=globalenv())
some_list = list()
for (iter in 1:3) {
set.seed(iter)
some_list[[iter]] = sample(1:10)
}
some_list
这段代码向我返回了这样的列表:
> some_list
[[1]]
[1] 3 4 5 7 2 8 9 6 10 1
[[2]]
[1] 2 7 5 10 6 8 1 3 4 9
[[3]]
[1] 2 8 4 3 9 6 1 5 10 7
之后,我重新运行相同的脚本,并期望在会话中运行rm(.Random.seed, envir=globalenv())
后重置种子。因此,将获得不同的结果。
但是实际情况有所不同-即使从.Random.seed
globalenv()
删除了.Random.seed
之后,我仍然收到完全相同的列表。 请查看附带确切命令顺序的屏幕:命令顺序
我真的对set.seed的这种行为感到困惑。
我的问题是:
1)set.seed的这种行为是否正常?
2)如果rm(.Random.seed, envir=globalenv())
如何重置种子?
提前致谢。
似乎您正在通过调用rm(.Random.seed, envir=globalenv())
来针对随机行为,所以为什么不从代码中完全删除set.seed
?
rm(.Random.seed, envir=globalenv())
some_list = list()
for (iter in 1:3) {
some_list[[iter]] = sample(1:10)
}
some_list
每次运行时,上面的结果都会不同。 无需在我们的代码中设置set.seed
。
我基于Sys.time()作为种子创建了解决方法。 这是一个代码:
some_list = list()
for (iter in 1:3) {
set.seed(as.numeric(Sys.time()))
some_list[[iter]] = sample(1:10)
Sys.sleep(1)
}
some_list
但是,尽管如此,我需要添加Sys.sleep(1)
因为如果该周期中的操作持续少于1秒,则此解决方案将不起作用。 我相信这只是解决方法,主要问题仍然悬而未决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.