繁体   English   中英

R:set.seed在除去种子后产生相同的结果

[英]R: set.seed produces the same result after seed removal

背景。 我想在R v.3.5.0for周期内生成随机序列。 为此,我使用下面的代码:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM