web-dev-qa-db-fra.com

Set.seed est-il cohérent sur différentes versions de R (et Ubuntu)?

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.

  1. Puis-je mettre à jour R sans changer les numéros générés à partir de chaque graine?
  2. Puis-je faire de même pour mon système d'exploitation?
  3. Si non à 1) ou 2), existe-t-il un moyen de modifier les graines de mon code de manière à ce qu'elles soient cohérentes avec les anciennes graines?
19
Phil

Cohérence multi-OS: oui

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().

Cohérence sur les versions de R: pas nécessairement

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:

R 3.2.0

> set.seed(1999)
> sample(LETTERS, 3)
[1] "T" "N" "L"

R 3.5.3

> set.seed(1999)
> sample(LETTERS, 3)
[1] "T" "N" "L"

R 3.6.0

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").

R 3.6.0

> 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"
34
bschneidr

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.

2
cdermont