J'utilise actuellement la version R 3.1.0 (sur Ubuntu 12.04 LTS) et comme ma version R et mon système d'exploitation vieillissent, je prévois de les mettre à jour. Cependant, j'ai beaucoup de simulations qui reposent sur set.seed () et je voudrais qu'elles me donnent toujours les mêmes nombres aléatoires après la mise à jour de R et de mon système d'exploitation.
Ma question est donc triple.
Si vous avez installé R sur deux systèmes d'exploitation différents sans modifier manuellement les paramètres par défaut ou le RProfile
, vous devriez obtenir les mêmes résultats lorsque vous utilisez set.seed()
.
Auparavant, set.seed()
donnerait les mêmes résultats sur toutes les versions de R, mais ce n'est généralement plus vrai grâce à une mise à jour peu annoncée dans R 3.6.0. Ainsi, vous pouvez obtenir une cohérence entre les versions comparant les résultats avant R 3.6.0, mais si vous comparez une utilisation post-3.6.0 de set.seed()
à une utilisation pré-3.6.0 de set.seed()
, vous obtiendrez des résultats différents.
Vous pouvez le voir dans les exemples ci-dessous:
> set.seed(1999)
> sample(LETTERS, 3)
[1] "T" "N" "L"
> set.seed(1999)
> sample(LETTERS, 3)
[1] "T" "N" "L"
set.seed(1999)
sample(LETTERS, 3)
[1] "D" "Z" "R"
La raison de l'incohérence est que dans R 3.6.0, le type par défaut de générateur de nombres aléatoires sous le capot a été changé . Maintenant, afin d'obtenir les résultats de set.seed()
pour correspondre, vous devez d'abord appeler la fonction RNGkind(sample.kind = "Rounding")
.
> RNGkind(sample.kind = "Rounding")
Warning message:
In RNGkind(sample.kind = "Rounding") : non-uniform 'Rounding' sampler used
> set.seed(1999)
> sample(Letters, 3)
[1] "T" "N" "L"
Après avoir testé sur plusieurs versions R (3.1.0, 3.3.1, 3.4.2) et deux machines différentes (Windows 7 x64, Windows 10 x64), j'ai obtenu les mêmes runif()
nombres aléatoires avec les mêmes set.seed()
indépendamment des versions R et du système d'exploitation. Pour autant que je sache, cela suggère un oui pour les questions 1 et 2.