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

时间:2014-03-29 07:42:24

标签: 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")

真的感谢您的建议!

4 个答案:

答案 0 :(得分:13)

只需使用当前系统时间即可撤消&#34;种子通过引入一种新的独特随机种子:

set.seed(Sys.time())

如果您需要更高的精确度,请考虑提取system timestamp by millisecond(使用R&#39; s system(..., intern = TRUE)功能。)

答案 1 :(得分:7)

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

见这个例子

set.seed(12)
sample(1:15, 5)

[1] 2 12 13 4 15

sample(1:15, 5) # run the same code again you will see different results

[1] 1 3 9 15 12

set.seed(12)#set seed again to see first set of results
sample(1:15, 5)

[1] 2 12 13 4 15

答案 2 :(得分:5)

set.seed(NULL)

查看帮助文档-?set.seed

  

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

答案 3 :(得分:0)

set.seed()仅适用于包含随机样本的第一行,不会影响下一个命令。如果您希望它适用于其他行,则必须使用相同的“种子” - 参数调用set.seed函数。