【R】set.seed()関数って何なのさ?

Rによるデータサイエンスを勉強していたら、頻繁に遭遇するset.seed()。
乱数生成するのに必要な理由が分からなかったけど、やっと分かった。

set.seed()は乱数種を指定する関数で、常に同じ乱数を発生させられる。もはや乱数じゃない(笑)!

どういうことか具体的に見てみよう。
正規分布に従う乱数を発生させる関数rnormを使用して、乱数を5個発生させる。

> rnorm(5)
[1] -1.1589164  0.6717548 -0.5479705 -0.3373437  0.1150608
> rnorm(5)
[1] -0.7928601  0.4900138  0.2429032  0.1189651 -0.1188704
> rnorm(5)
[1]  0.1798600 -0.6607594 -1.8879199  1.3459750 -1.2285467
> rnorm(5)
[1]  0.4063670 -0.8721864  1.0451283  1.3502680 -0.5012976
> rnorm(5)
[1] -1.9622060  1.6993498  0.5184371 -1.8604497  0.7391993

たしかに、rnormを実行するたびに乱数が生成されて、発生する乱数も異なっている。
さて、ここで、set.seed()とセットでrnormを実行してみよう。

> set.seed(1);rnorm(5)
[1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078
> set.seed(1);rnorm(5)
[1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078
> set.seed(1);rnorm(5)
[1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078
> set.seed(1);rnorm(5)
[1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078

なんと常に同じ数のセットが得られた。