2012-12-21 2 views
17

私はここでR初心者です。現在のランダムシードを印刷し、set.seed()でそれを入力できるようにします。

letが、私は

set.seed(123456) 

が、私はそう、私は文書化のためにそれをプリントアウトすることができます値123456を取得したいコードの行を持っていると言う場合、および将来的に値を再入力する必要があります。どうすればその種子を手に入れることができますか?

私は上のコード行をコメントアウトすることができるので、私は実際にシードが123456であることを知りません。したがって、現在のシードの位置を単一の整数として出力する必要があります。 626の整数のリストとして。

+2

'seed < - 123456;を実行する方が簡単ではないでしょうか。 set.seed(seed) 'を実行し、' seed'の値を出力して保存しますか? – joran

+0

はい、始めたい特定のシードがない場合は、コード行をコメントアウトします。 –

+0

公正で、そのページには多くの情報があります。 –

答えて

25

set.seed()で使用される種子および.Random.seedの情報との間の一方向の関係を効果的にあります。 ?Random.seedと@ MattTenenbaumの答えが示すように、.Random.seedの情報を保存して復元することができます。 @JoshuaUlrichとして例えば...私は.Random.seedの現在の状態から、簡単な整数の種を導き出すだろう機能のための欲求を認めるが、その不在で、あなたは完全な情報を保存し、復元する必要が

set.seed(1001) 
save(".Random.seed",file="random_state_seed1001.RData") ## save current state 
runif(1) 
## [1] 0.9856888 
runif(1) 
## [1] 0.4126285 
runif(1) 
## [1] 0.4295392 
load("random_state_seed1001.RData") ## restore state just after set.seed() 
runif(1) 
## [1] 0.9856888 

指摘あなたが保存と復元の間RNGの種類(通常のずれて発電機の種類)を変更しない場合は、この唯一の作品/のみ安全です...

より完全なソリューション:

save_rng <- function(savefile=tempfile()) { 
    if (exists(".Random.seed")) { 
     oldseed <- get(".Random.seed", .GlobalEnv) 
    } else stop("don't know how to save before set.seed() or r*** call") 
    oldRNGkind <- RNGkind() 
    save("oldseed","oldRNGkind",file=savefile) 
    invisible(savefile) 
} 

restore_rng <- function(savefile) { 
    load(savefile) 
    do.call("RNGkind",as.list(oldRNGkind)) ## must be first! 
    assign(".Random.seed", oldseed, .GlobalEnv) 
} 

試してみる:

set.seed(101) 
RNGstore <- save_rng() ## save file name 
runif(1) 
## [1] 0.3721984 
runif(10) 
## [1] 0.04382482 0.70968402 0.65769040 0.24985572 0.30005483 0.58486663 
## [7] 0.33346714 0.62201196 0.54582855 0.87979573 
restore_rng(RNGstore) 
runif(1) 
## [1] 0.3721984 

も参照してください:http://www.cookbook-r.com/Numbers/Saving_the_state_of_the_random_number_generator/

+1

これは本当に安全な解決策ではなく、RNGの種類と通常の種類が '.Random.seed'で暗黙の値に設定されていることを保証していません。 –

+0

@JoshuaUlrich、完全なRNG状態を保存して復元しているところに働いている例があるかどうか知っていますか(これは 'Random.seed ')'ではありません。そうでなければ私は自分の質問を編集する手間に行きます。そうでなければ私はそれにリンクします... –

+0

私はそのような例はわかりません。私はそれが 'set.seed'が何のためにあるのか疑問に思っています。 –

3

set.seedを電話したら、.Random.seedを参照することができます(詳細はhttp://stat.ethz.ch/R-manual/R-patched/library/base/html/Random.htmlを参照)。

簡単な例:

set.seed(123) 
tmp <- .Random.seed 
> runif(10) 
[1] 0.2875775 0.7883051 0.4089769 0.8830174 0.9404673 0.0455565 0.5281055 0.8924190 0.5514350 0.4566147 
.Random.seed <- tmp 
> runif(10) 
[1] 0.2875775 0.7883051 0.4089769 0.8830174 0.9404673 0.0455565 0.5281055 0.8924190 0.5514350 0.4566147 
+2

しかし、.Random.seedは私に626の整数のリストを与えます。 –

3

ここでは実際にはうまく動作するはずです(ただし、例えばのために使用すべきではない何かがあります暗号):あなたが必要なのです

new.seed <- as.integer(runif(1)*2e9) 
cat("Random seed: ", new.seed, "\n") 
set.seed(new.seed) 

は、実際に動作するには、このためのシードを設定するには、それはあなたが簡単に持っていることができますよう、それは、元の質問にはかなりの答えではないのですが、あなたが探していたものであるかもしれません事前に指定された整数で手動で設定することはありません。

関連する問題