getSeed
これは、関数の逆関数がないという問題を修正する試みsetSeed
です。約 12 時間前に、Using R, how to get.seed()? に同様の質問を投稿しました。「重複」に分類されたため閉鎖されました...
グローバル変数を必要とするシードメモリを使用してソリューションを「ハッキング」しました.random.seed.memory
。
utils::globalVariables(c(".random.seed.memory"));
を使用して「シードを生成」する必要があるため、タイミングは重要ですset.seed
github.monte = "https://raw.githubusercontent.com/MonteShaffer/";
include.me = paste0(github.monte, "humanVerse/main/humanVerse/R/functions-str.R");
source(include.me); # trimMe function
include.me = paste0(github.monte, "humanVerse/main/humanVerse/R/functions-random.R");
source(include.me); # getSeed, setSeed, and so on.
この関数setSeed
は一般に次のように動作しますが、整数 (kind、normal.kind、sample.kind)set.seed
を超えて渡されるカスタム パラメーターはすべてset.seed
リストする必要がありますargs.set
。省略記号は、パラメーターを有効にして機能する内部関数に渡す...
ために使用されるためです。setSeed
initSeed(...)
setSeed
getSeed
rand()
また、min、max、n、メソッドなどを渡すC 標準関数も作成しました。これは、「整数」を生成setSeed
してメモリに格納する方法です。デフォルトのシード生成 (および)Sys.time()
の最小/最大として使用します。 単一の値を計算するために範囲内のベクトルを作成する必要があるため、悪い考えですが、これはwhich feedsのメソッド オプションです。デフォルトの「high-low」は、「floor」よりもわずかに高速であることがわかりました。min = -1*as.integer(Sys.time())
max = as.integer(Sys.time())
sample
rand()
initSeed
利用方法
### VERBOSITY is HIGH AT THE MOMENT ###
print("random 5"); rnorm(5);
setSeed(NULL); # this will automatically call initSeedMemory() if necessary
setSeed(.random.seed.memory$last); rnorm(5);
setSeed(getSeed()); rnorm(5);
print("random 5"); rnorm(5);
setSeed(getSeed()); rnorm(5);
デフォルトでは、「last」と呼ばれるグローバル リストの要素にシード値を格納します。これにより、実行中のプロセスに応じて異なるメモリ シードを追跡できます。以下の例では、具体的には「last」にアクセスし、「nsim」...メモリに格納されている 2 番目のシードにアクセスします...
### VERBOSITY is HIGH AT THE MOMENT ###
initSeedMemory( purge.memory = TRUE);
setSeed(NULL);
setSeed(.random.seed.memory$last); rnorm(5);
setSeed(getSeed()); rnorm(5);
getSeed(); # accessor to .random.seed.memory
.random.seed.memory;
print("random 5"); rnorm(5);
setSeed(NULL, key="nsim"); rnorm(5);
setSeed(.random.seed.memory$nsim, key="nsim"); rnorm(5);
setSeed(getSeed("nsim"), key="nsim"); rnorm(5);
getSeed("nsim"); # accessor to .random.seed.memory
.random.seed.memory;
print("random 5"); rnorm(5);
setSeed(.random.seed.memory$last); rnorm(5);
setSeed(getSeed()); rnorm(5);
.random.seed.memory;
set.seed(.random.seed.memory$last); rnorm(5);
set.seed(.random.seed.memory$nsim); rnorm(5);
.random.seed.memory;
print("random 5"); rnorm(5);
もちろん、バグがあるかもしれません。提案やバグを見つけていただければ幸いです。
-- 2021 年 2 月 19 日午前 5 時頃 (PST) --
もちろん、固定シードを渡す機能も可能です。
setSeed(NULL, "nsim"); rnorm(5); # randomly generated seed under the hood, but stored
setSeed(123, "z5"); rnorm(5); # you can still fix the seed manually yourself, still stored and accessible in the list
setSeed(getSeed("nsim"), "nsim"); rnorm(5);
setSeed(getSeed("z5"), "z5"); rnorm(5);