Es hängt davon ab, wie Sie den Code ausführen oder ob es einen Code gibt, der insofern etwas stochastisch ist, als er Zufallszahlen auf zufällige Weise zeichnet. (Ein Beispiel hierfür sind die Permutationstests in unserem veganen Paket, bei denen wir nur so lange permutieren, bis wir genügend Daten gesammelt haben, um zu wissen, ob sich ein Ergebnis von dem angegebenen Fehler vom Typ I unterscheidet, wobei eine Fehlerrate vom Typ II berücksichtigt wird.) Obwohl selbst das sollte die Auslosungen nicht beeinflussen ...
Wenn das endgültige Skript immer nur als Batch-Job oder in seiner Gesamtheit ausgeführt wird und es keine stochastischen Draws vom Pseudozufallszahlengenerator gibt, ist es sicher, einen Startwert oben im Skript zu setzen und ihn in seiner Gesamtheit auszuführen .
Wenn Sie den Code schrittweise durchlaufen und möglicherweise Blöcke erneut ausführen möchten, benötigen Sie set.seed()
vor jedem Funktionsaufruf einen Aufruf, der vom Pseudozufallszahlengenerator abgerufen wird.
Für meine wissenschaftlichen Arbeiten gehe ich routinemäßig super defensiv und setze Samen vor jedem Codeblock; Dies ermöglicht Aktualisierungen des Skripts zu einem späteren Zeitpunkt, die möglicherweise jederzeit in das vorhandene Skript eingefügt werden müssen - beispielsweise um auf Kommentare von Rezensenten oder Mitautoren zu antworten.
Ihre Ergebnisse hängen hoffentlich nicht von einem bestimmten Satz von pseduo-zufälligen Werten ab, sodass das Problem in der Lage ist, die genauen Werte zu reproduzieren, die in einem Bericht oder Papier angegeben sind. Auch wenn Sie möglicherweise sehr defensiv sind und für jeden Codeblock einen Startwert festlegen, müssen Sie möglicherweise die genaue Installation neu erstellen --- R-Version und Paketversionen, sodass das Aufzeichnen dieser Details unerlässlich ist. Um besonders sicher zu sein, müssen Sie frühere R-Versionen und -Pakete für bestimmte Projekte / Papiere aufbewahren. In der Tat tun dies viele Menschen.
R
Arbeiten kann dieser Zustand in gefunden werden.Random.seed
. Meine größte SorgeR
ist, dass einige Routinen dies umgehen könnten - undset.seed
in einigen Fällen möglicherweise ganz ignorieren könnten .