Pour une réponse à 2, consultez d'abord la page d'aide ?RNGkind
.
Pour trouver le type de RNG en cours d'utilisation :
RNGkind()
# [1] "Mersenne-Twister" "Inversion"
Le Mersenne Twister est le paramètre par défaut.
À partir de la page d'aide :
‘"Mersenne-Twister":’ De Matsumoto et Nishimura (1998). Un GFSR tordu avec une période de 2^19937 - 1 et une équidistribution en 623 dimensions consécutives (sur toute la période). La ‘seed’ est un ensemble de 624 dimensions de nombres entiers de 32 bits plus une position actuelle dans cet ensemble.
Pour trouver la graine actuelle en cours d'utilisation, vous devez d'abord appeler le générateur de nombres aléatoires.
runif(1, 0, 1)
# [1] 0.9834062
.Random.seed
# [Fournit un vecteur de longueur 626]
Appeler set.seed(some_integer)
suivi de .Random.seed
, donnera toujours le même vecteur de longueur 626 si vous utilisez le même some_integer
. Pour le dire autrement, le vecteur de longueur 626 est déterminé uniquement par some_integer
, si l'on utilise le Mersenne Twister, bien sûr.
Aussi, bien sûr, exécuter set.seed
à une valeur fixée vous donnera les mêmes valeurs pour les appels aux routines de nombres aléatoires suivantes. C'est son principal intérêt en pratique, pour garantir la reproductibilité. Par exemple,
set.seed(1)
runif(5, 0, 1)
# [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819
rnorm(1, 0, 1)
# [1] 1.272429
set.seed(1)
runif(5, 0, 1)
# [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819
rnorm(1, 0, 1)
# [1] 1.272429
Tout le code de génération de nombres de base en R se trouve dans le fichier src/main/RNG.c du code source.
Il est en C, mais assez facile à suivre.