現在、Rバージョン3.1.0(Ubuntu 12.04 LTS上)を実行しています。Rバージョンとオペレーティングシステムの両方が古くなっているので、両方を更新する予定です。ただし、set.seed()に依存する多くのシミュレーションがあり、Rとオペレーティングシステムの両方を更新した後も、同じ乱数を与えたいと思います。
だから私の質問は3つあります。
手動でデフォルトまたはRProfile
を変更せずにRを2つの異なるオペレーティングシステムにインストールした場合、set.seed()
を使用しても同じ結果が得られます。
以前はset.seed()
がRバージョン間で同じ結果を返す場合がありましたが、R 3.6.0で少し発表された更新のおかげで、それは一般的に正しくありません。したがって、R 3.6.0より前のバージョン間での一貫性の比較結果を取得できますが、3.6.0より後のset.seed()
の使用と3.6.0より前のset.seed()
の使用を比較すると、 、異なる結果が得られます。
以下の例でそれを見ることができます:
_> 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"
_
不整合の理由は、R 3.6.0で デフォルトの種類の内部の乱数ジェネレーターが変更された であるためです。ここで、set.seed()
からの結果を一致させるために、最初に関数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"
_
いくつかのRバージョン(3.1.0、3.3.1、3.4.2)と2つの異なるマシン(Windows 7 x64、Windows 10 x64)でテストしたところ、同じrunif()
乱数が同じset.seed()
Rバージョンとオペレーティングシステムに関係なく。私の知る限り、これは質問1と2の両方で「はい」を示しています。