如何在特定代码行之后停止set.seed()?

use*_*767 10 r random-seed

我想在特定行之后结束set.seed()的范围,以便对其余代码进行实际随机化.这是一个例子,我希望set.seed()用于"rnorm"(第4行),但不是"nrow"(第9行)

set.seed(2014)
f<-function(x){0.5*x+2}
datax<-1:100
datay<-f(datax)+rnorm(100,0,5)
daten<-data.frame(datax,datay)
model<-lm(datay~datax)
plot(datax,datay)
abline(model)
a<-daten[sample(nrow(daten),20),]
points(a,col="red",pch=16)
modela<-lm(a$datay~a$datax)
abline(modela, col="red")
Run Code Online (Sandbox Code Playgroud)

真的感谢您的建议!

Rob*_*ski 15

只需使用当前系统时间通过引入新的唯一随机种子来"撤消"种子:

set.seed(Sys.time())
Run Code Online (Sandbox Code Playgroud)

如果您需要更高的精度,请考虑以毫秒为单位获取系统时间戳(使用R的system(..., intern = TRUE)函数).


Aks*_*dal 13

set.seed()仅适用于下一次执行.所以你想要的已经发生了.

看这个例子

set.seed(12)
sample(1:15, 5)
Run Code Online (Sandbox Code Playgroud)

[1] 2 12 13 4 15

sample(1:15, 5) # run the same code again you will see different results
Run Code Online (Sandbox Code Playgroud)

[1] 1 3 9 15 12

set.seed(12)#set seed again to see first set of results
sample(1:15, 5)
Run Code Online (Sandbox Code Playgroud)

[1] 2 12 13 4 15

  • 其实没有。如果你运行“set.seed(12)”,它会启动某种种子循环。第二个“sample”调用始终相同。例如:运行一次“set.seed(12)”,“s1a &lt;-sample(1:15, 5)”,然后运行“s2a &lt;-sample(1:15, 5)”。然后运行`set.seed(12)`,`s1b &lt;-sample(1:15, 5)`,然后`s2b &lt;-sample(1:15, 5)`,你将得到`identical(s1a, s1b) )==TRUE` 和 `相同(s2a, s2b)==TRUE`。对于所有后续示例调用也是如此。 (5认同)

Car*_*hen 11

set.seed(NULL)
Run Code Online (Sandbox Code Playgroud)

查看帮助文档- ?set.seed

“如果使用seed = NULL进行调用,它将重新初始化(请参阅'注释'),就像尚未设置任何种子一样。”