200 votes

Raisons pour utiliser la fonction set.seed

Bien souvent, j'ai vu la fonction set.seed dans R avant de lancer le programme. Je sais que c'est essentiellement utilisé pour la génération de nombres aléatoires. Y at-il un besoin spécifique pour définir cela?

288voto

Dirk Eddelbuettel Points 134700

Le besoin est la volonté de résultats reproductibles, qui peuvent par exemple provenir d'essayer de déboguer votre programme, ou bien sûr d'essayer de refaire ce qu'il fait:

Ces deux résultats nous permettra de "jamais" à reproduire, comme je viens de demandé quelque chose "aléatoire":

R> sample(LETTERS, 5)
[1] "K" "N" "R" "Z" "G"
R> sample(LETTERS, 5)
[1] "L" "P" "J" "E" "D"

Ces deux-là, cependant, sont identiques , car j'ai mis la graine:

R> set.seed(42); sample(LETTERS, 5)
[1] "X" "Z" "G" "T" "O"
R> set.seed(42); sample(LETTERS, 5)
[1] "X" "Z" "G" "T" "O"
R> 

Il est vaste littérature sur tout ce qui; Wikipedia est un bon début. En substance, ces Rng sont appelés Générateurs de nombres Pseudo Aléatoires, car ils sont en fait totalement algorithmique: compte-tenu de la même semence, vous obtenez la même séquence. Et c' est une fonction et non un bug.

34voto

Chia-hung Points 88

Vous devez définir une graine chaque fois que vous souhaitez obtenir un résultat aléatoire reproductible.

 set.seed(1)
rnorm(4)
set.seed(1)
rnorm(4)
 

18voto

Ridingstar Points 21

Juste plus de l'ajout de certains aspects. Nécessité de mettre en de la graine: Dans le monde académique, si l'on prétend que son algorithme permet d'obtenir, dire 98.05% performance sur une simulation, d'autres ont besoin pour être en mesure de la reproduire.

?set.seed

En passant par le fichier d'aide de cette fonction, ce sont quelques faits intéressants:

(1) ensemble.de la graine() renvoie NULL, invisible

(2) "au départ, il n'y a pas de postérité; un nouveau est créé à partir de l'heure et de l'ID de processus lorsque celui-ci est requis. D'où les différentes sessions de donner différents résultats de simulation par défaut. Cependant, la graine pourrait être restaurée à partir d'une session précédente, si préalablement enregistré de l'espace de travail est restauré.", c'est pourquoi vous voulez à l'appel.de la graine() avec les mêmes valeurs de type entier la prochaine fois que vous voulez une même séquence de séquence aléatoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X