19

私はここでRの初心者です。

コード行があるとしましょう

set.seed(123456)

次に、値 123456 を取得して、ドキュメント用に印刷し、必要に応じて後で値を再入力できるようにします。では、その種をどうやって手に入れるのでしょうか?

上記のコード行をコメントアウトする場合があることに注意してください。そのため、123456 にあるシードが実際にはわかりません。したがって、現在のシードの位置を、リストとしてではなく、単一の整数として出力する必要があります。 626 個の整数。

4

3 に答える 3

25

set.seed()で使用されるシードと の情報の間には事実上一方向の関係があり.Random.seedます。?Random.seed@MattTenenbaumの回答が示すように、情報は保存.Random.seedおよび復元できます。の現在の状態から単純な整数シードを導出する関数が必要であることを感謝し.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

@JoshuaUlrichが指摘しているように、保存と復元の間に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/

于 2012-12-21T21:44:59.773 に答える
3

これは実際には問題なく機能するはずです(ただし、暗号化などには使用しないでください):

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

これを機能させるには実際にシードを設定する必要があるため、元の質問に対する回答ではありませんが、事前に指定された整数。

于 2014-12-27T22:37:52.640 に答える
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
于 2012-12-21T21:33:07.927 に答える