2014-03-29 62 views
5

我想在特定行後面結束set.seed()的範圍,以便對代碼的其餘部分進行真正的隨機化。下面是我想set.seed()爲 「RNORM」(4號線)工作的一個例子,而不是 「nrow」(9號線)如何在特定的代碼行後停止set.seed()?

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") 

感謝的建議,真的!

回答

10

使用時只需將當前系統時間通過引入一個新的獨特的隨機種子「撤銷」的種子:

set.seed(Sys.time()) 

如果您需要更精確,可考慮取了system timestamp by millisecond(使用的r system(..., intern = TRUE)功能)。

+0

不錯的解決方案!總是樂於學習。謝謝。 – user3451767

-1

set.seed()僅適用於包含隨機樣本的第一行,並且不會影響下一個後續命令。如果你想讓它適用於其他行,你必須使用相同的「種子」參數來調用set.seed函數。

+4

僞隨機性不會阻止腳本保持確定性。他希望它是隨機過去某個點。 –

0

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