R内部
、<Rmath.h>: double rnorm (double mean, double sd)
機能からC機能は、一度に1つの乱数を生成します。 Rラッパー関数rnorm(n, mean, sd)
を呼び出すと、Cレベル関数n
回が呼び出されます。
これはn = 1
でRレベル機能を1回だけ呼び出すのと同じですが、n
回をreplicate
で複製します。
最初の方法ははるかに高速です(n
が本当に大きい場合は違いが見られます)。すべてがCレベルで行われるためです。 replicate
しかし、sapply
のラッパーなので、実際にベクトル化された関数ではありません(Is the "*apply" family really not vectorized?で読む)。
さらに、両方に同じランダムシードを設定した場合、同じ乱数セットを取得します。以下の私のコメントで
以上の実験例
、私はランダムシードが唯一のエントリで一度設定されていることを言います。人々がこれを理解するのを助けるために、私はこの例を提供します。大きいn
を使用する必要はありません。 n = 4
で十分です。この場合、すべての4つの数字が0
今エントリ種子から得られること
set.seed(0); rnorm(4, 0, 1)
## we get
[1] 1.2629543 -0.3262334 1.3297993 1.2724293
注、みましょう:
最初に、4個の標準の正常なサンプルを生成しながらのは、0にシードを設定できこれを行う:
set.seed(0)
rnorm(2, 0, 1)
## we get
[1] 1.2629543 -0.3262334
## do not reset seed, but continue with the previous seed
replicate(2, rnorm(1, 0, 1))
## we get
[1] 1.329799 1.272429
を参照してください。
しかし、私たちは途中でシードをリセットした場合、例えば、これは私が「エントリ」によって何を意味するかであるバック0
set.seed(0)
rnorm(2, 0, 1)
## we get
[1] 1.2629543 -0.3262334
## reset seed
set.seed(0)
replicate(2, rnorm(1, 0, 1))
## we get
[1] 1.2629543 -0.3262334
に設定します。
コードを実行すると、(期待どおり)両方の方法で同じ結果が得られます。 2回目のランダムシードを設定しないと、2番目の結果が得られます。最初の方法はより効率的で推奨される方法です。 – Roland
@Roland「ランダムシードを2回目に設定する」とはどういう意味ですか? – zack
@AlphaBetaGammaありがとう! – zack