R:set.seed 去除种子后产生相同的结果
R: set.seed produces the same result after seed removal
Background. 我想在 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
此代码 returns 我是这样的列表:
> 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())
之后重置种子,因此得到不同的结果。
但实际情况不同 - 即使在从 globalenv()
中删除 .Random.seed
之后,我仍收到完全相同的列表。
请查看附带确切命令顺序的屏幕:
Sequence of commands
我对set.seed的这种行为感到很困惑。
我的问题是:
1) set.seed这样的行为正常吗?
2) 如果 rm(.Random.seed, envir=globalenv())
不起作用,如何重置种子?
提前致谢。
我创建了基于使用 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 秒,此解决方案将不起作用。
我相信这只是解决方法,主要问题仍未解决。
您的目标似乎是通过调用 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
。
Background. 我想在 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
此代码 returns 我是这样的列表:
> 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())
之后重置种子,因此得到不同的结果。
但实际情况不同 - 即使在从 globalenv()
中删除 .Random.seed
之后,我仍收到完全相同的列表。
请查看附带确切命令顺序的屏幕:
Sequence of commands
我对set.seed的这种行为感到很困惑。
我的问题是:
1) set.seed这样的行为正常吗?
2) 如果 rm(.Random.seed, envir=globalenv())
不起作用,如何重置种子?
提前致谢。
我创建了基于使用 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 秒,此解决方案将不起作用。
我相信这只是解决方法,主要问题仍未解决。
您的目标似乎是通过调用 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
。