2017-01-20 6 views
1

RDataファイルを読み込むスクリプトがあります。このRDataファイルは、save.image関数を使用して別のスクリプトによって生成されました。 RDataファイルをロードするスクリプトを実行すると、rnormは毎回同じ出力を出します。rnormなどのRの乱数ジェネレータは、繰り返し実行で同じ出力を返します

ここは簡単な例です。

スクリプトRDATAをロードし、rnormを呼び出すRDATAファイル、

rm(list = ls()) 
save.image('test.RData') 

スクリプトを生成するために、

rm(list = ls()) 
load('test.RData') 
input = rnorm(10) 
print(input) 

このラウンド一つの方法は、中に保存ではなく、save.image使用することです、私を発見しました最初のスクリプト。しかし、これはあまり便利ではありません。なぜなら私の環境からどのオブジェクトを保持したいのかを常に事前に知っているわけではないからです。しかし、私はrnormが2番目のスクリプトを実行するたびに異なる種を使用することを間違いなく望みます。 rnormを呼び出す前に

set.seed(NULL) 

答えて

3

これを行うには、おそらく最も簡単な方法は、(画像に保存され、あなたがそれを読み込む際にそのために復元された)種子を再初期化することです。だからあなたのコードは

rm(list = ls()) 
load('test.RData') 
set.seed(NULL) 
input = rnorm(10) 
print(input) 

編集に変更しなければなりません:異なるオプションsave.image()呼び出しの前にすぐrm(.Random.seed)を追加することにより、資源データファイルを生成するスクリプトを変更することです。これにより、画像がロードされるたびに、PRNG(疑似乱数ジェネレータ)のシードが変更されないことが保証されます。したがって、画像をロードするスクリプトは、実行ごとに異なる擬似乱数シーケンスを使用するために特別な処理を行う必要はありません。 2つのソリューションのどちらが適切かは、具体的なユースケースによって異なります。

+0

シードを再初期化するための推奨される方法は、 'set.seed(NULL)'です。ドキュメントを参照してください。 – Roland

+0

ありがとう! - それに応じて私の答えを変更しました。 –

+0

ありがとう!それは私の質問に答えます。 –

関連する問題