2014-03-29 11 views
5

Ich möchte den Bereich von set.seed() nach einer bestimmten Zeile beenden, um eine echte Randomisierung für den Rest des Codes zu haben. Hier ist ein Beispiel, in dem ich set.seed() will für "rnorm" (Linie 4) arbeiten, aber nicht für "nrow" (Linie 9)Wie stoppe ich set.seed() nach einer bestimmten Codezeile?

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

Dank für Anregungen, in der Tat!

Antwort

10

einfach die aktuelle Systemzeit verwenden, um „Rückgängig“ den Samen durch einen neuen eindeutigen zufälligen Samen Einführung:

set.seed(Sys.time()) 

Wenn Sie mehr Präzision benötigen, sollten Abrufen der system timestamp by millisecond (system(..., intern = TRUE) Funktion die Nutzung R).

+0

Schöne Lösung! Immer glücklich zu lernen. Danke. – user3451767

-1

set.seed() funktioniert nur für die erste Zeile, die zufällige Stichproben enthält, und beeinflusst nicht den nächsten folgenden Befehl. Wenn Sie möchten, dass es für die anderen Zeilen funktioniert, müssen Sie die set.seed-Funktion mit demselben "seed" -the-Parameter aufrufen.

+4

Pseudozufälligkeit verhindert nicht, dass das Skript deterministisch bleibt. Er möchte, dass es ab einem bestimmten Punkt stochastisch ist. –

0

set.seed() funktioniert nur für die nächste Ausführung. Was du willst, passiert schon.

sehen diesem Beispiel

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