R Internal
intern R, die C-Funktion aus <Rmath.h>: double rnorm (double mean, double sd)
Funktion erzeugt eine Zufallszahl zu einer Zeit. Wenn Sie die R-Wrapper-Funktion rnorm(n, mean, sd)
aufrufen, ruft sie die C-Level-Funktion n
mal auf.
Dies ist das gleiche wie Sie R-Funktion nur einmal mit n = 1
aufrufen, aber replizieren Sie es n
mal mit .
Die erste Methode ist viel schneller (möglicherweise wird der Unterschied gesehen werden, wenn n
wirklich groß ist), da alles auf C-Ebene getan wird. replicate
ist jedoch ein Wrapper von sapply
, so ist es nicht wirklich eine vektorisierte Funktion (lesen Sie Is the "*apply" family really not vectorized?).
Wenn Sie für beide den gleichen zufälligen Startwert festlegen, erhalten Sie denselben Satz von Zufallszahlen.
Ein anschauliches Experiment
In meinem Kommentar unten, sage ich, dass zufällige Samen nur einmal auf Eintrag gesetzt ist. Um Menschen zu helfen, dies zu verstehen, stelle ich dieses Beispiel vor. Es ist nicht notwendig, große n
zu verwenden. n = 4
ist ausreichend.
Lassen Sie uns zuerst gesetzt Samen bei 0, während 4-Standard normalen Proben zu erzeugen:
set.seed(0); rnorm(4, 0, 1)
## we get
[1] 1.2629543 -0.3262334 1.3297993 1.2724293
Beachten Sie, dass in diesem Fall alle vier Zahlen aus dem Eintrag Samen 0.
Jetzt erhalten werden, lassen Sie uns tun dies:
set.seed(0)
rnorm(2, 0, 1)
## we get
[1] 1.2629543 -0.3262334
## do not reset seed, but continue with the previous seed
replicate(2, rnorm(1, 0, 1))
## we get
[1] 1.329799 1.272429
Sehen Sie?
Aber wenn wir Samen in der Mitte zurückzusetzen, zum Beispiel, setzen Sie ihn auf 0 zurück
set.seed(0)
rnorm(2, 0, 1)
## we get
[1] 1.2629543 -0.3262334
## reset seed
set.seed(0)
replicate(2, rnorm(1, 0, 1))
## we get
[1] 1.2629543 -0.3262334
Dies ist, was ich mit „Eintrag“ bedeuten.
Ausführen Ihres Codes Ich erhalte das gleiche Ergebnis auf beide Arten (wie erwartet). Ich erhalte Ihr zweites Ergebnis, wenn ich den Zufallssatz nicht zum zweiten Mal setze. Der erste Weg ist effizienter und daher empfehlenswert. – Roland
@Roland Können Sie erklären, was Sie meinen, indem Sie den Zufallssamen das zweite Mal setzen? – zack
@AlphaBetaGamma Danke! – zack