web-dev-qa-db-ja.com

set.seedは、R(およびUbuntu)のさまざまなバージョンで一貫していますか?

現在、Rバージョン3.1.0(Ubuntu 12.04 LTS上)を実行しています。Rバージョンとオペレーティングシステムの両方が古くなっているので、両方を更新する予定です。ただし、set.seed()に依存する多くのシミュレーションがあり、Rとオペレーティングシステムの両方を更新した後も、同じ乱数を与えたいと思います。

だから私の質問は3つあります。

  1. 各シードから生成される数値を変更せずにRを更新できますか?
  2. 私のオペレーティングシステムに対して同じことを行うことはできますか?
  3. 1)または2)のいずれかに当てはまらない場合、コード内のシードを古いシードと一致するように変更する方法はありますか?
19
Phil

OS間の一貫性:はい

手動でデフォルトまたはRProfileを変更せずにRを2つの異なるオペレーティングシステムにインストールした場合、set.seed()を使用しても同じ結果が得られます。

Rのバージョン間の一貫性:必ずしもそうではない

以前はset.seed()がRバージョン間で同じ結果を返す場合がありましたが、R 3.6.0で少し発表された更新のおかげで、それは一般的に正しくありません。したがって、R 3.6.0より前のバージョン間での一貫性の比較結果を取得できますが、3.6.0より後のset.seed()の使用と3.6.0より前のset.seed()の使用を比較すると、 、異なる結果が得られます。

以下の例でそれを見ることができます:

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"
_

不整合の理由は、R 3.6.0で デフォルトの種類の内部の乱数ジェネレーターが変更された であるためです。ここで、set.seed()からの結果を一致させるために、最初に関数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

いくつかのRバージョン(3.1.0、3.3.1、3.4.2)と2つの異なるマシン(Windows 7 x64、Windows 10 x64)でテストしたところ、同じrunif()乱数が同じset.seed() Rバージョンとオペレーティングシステムに関係なく。私の知る限り、これは質問1と2の両方で「はい」を示しています。

2
cdermont