How do I stop set.seed() after a specific line of code?

假装没事ソ 提交于 2019-12-10 02:12:02

问题


I would like to end the scope of set.seed() after a specific line in order to have real randomization for the rest of the code. Here is an example in which I want set.seed() to work for "rnorm" (line 4), but not for "nrow" (line 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")

Thanks for suggestions, indeed!


回答1:


Simply use the current system time to "undo" the seed by introducing a new unique random seed:

set.seed(Sys.time())

If you need more precision, consider fetching the system timestamp by millisecond (use R's system(..., intern = TRUE) function).




回答2:


set.seed() only works for the next execution. so what you want is already happening.

see this example

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




回答3:


set.seed(NULL)

See help documents - ?set.seed:

"If called with seed = NULL it re-initializes (see ‘Note’) as if no seed had yet been set."




回答4:


set.seed() just works for the first line containing randomly sample, and will not influence the next following command. If you want it to work for the other lines, you must call the set.seed function with the same "seed"-the parameter.



来源:https://stackoverflow.com/questions/22728422/how-do-i-stop-set-seed-after-a-specific-line-of-code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!