回答:
実は、これはRの質問だけではありません。より一般的には、乱数の生成に関連しています。
「ランダムな」数値は、統計の多くの部分で非常に重要です。特定のプロパティを持つために生成するランダム値が必要であり、(通常)乱数ジェネレーターの構築とそのプロパティのチェックに多くの労力が費やされます。
アイデアは、実際に乱数の良い代用となる一連の値を取得したいというものです。乱数生成の通常の主力は、均一分布です(そこからガウス乱数のような他のものを構築します)。
たとえば、多くの人は前のものに取り組んでいます:
?runif
Rを参照してください。?.Random.seed
これにより、Rで使用可能な多数の乱数ジェネレータを説明するヘルプへのリンクとともに、ランダムシードの存在について説明されていることがわかります(独自の乱数ジェネレータを提供することもできます)。同じヘルプページでは、以前に乱数生成を使用したことがない場合、またはシードを設定していない場合は、シードから始めて、クロックから取得され、その後、以前の値が格納されることがわかります(そのため、次に取得する乱数は前回値をもう1つ生成した場合に取得したものと同じもの-「どこにいるのか」を記憶しています)。
runif
R の関数(他のパッケージに含まれるかなりの数の乱数生成ルーチンのように、通常は同様の処理を行うことができます)は、乱数シードが保持される場所を認識しています。それはその値を更新し続けます。したがって、明示的にシードを渡さなくても機能しますが、シードを使用します。与えなかった場合は、最後に保存したものを使用します。
それが毎回異なる出力を与える理由については(同じシーケンスを与えるように指示しない場合):毎回同じ値は通常、非常に非生産的であるため、これを行います-繰り返されるプロパティがありませんランダムサンプリングの場合、乱数ジェネレーターを使用するputposeにはあまり役立ちません。
毎回同じ結果を得るには、ランダムシードを設定する必要があります。そのためには?set.seedを使用します。検討してください:
> runif(1)
[1] 0.6467259
> runif(1)
[1] 0.2101857
> set.seed(1)
> runif(1)
[1] 0.2655087
> set.seed(1)
> runif(1)
[1] 0.2655087
これを読むことに興味があるかもしれません: set.seed関数を使用する理由。