「統計を始める方へ(1)_データ環境Rの基本的なプログラミング|データアーティスト」で,サイコロをシミュレーションするプログラム片で,round(6*runif(n)+0.5) が使われていたので,重箱の隅つつき...
> n <- 1e8
> system.time(x <- round(6*runif(n)+0.5))
ユーザ システム 経過
7.789 0.625 8.362
> system.time(x <- sample(1:6, n, replace=TRUE))
ユーザ システム 経過
2.860 0.460 3.296
> system.time(x <- sample(6, n, replace=TRUE))
ユーザ システム 経過
1.780 0.153 1.923
意外とやりそうなのが,sample(1:6, n, replace=TRUE) であるが,これは,sample(6, n, replace=TRUE) より劣る。以下の例を見れば分かる。何故そうなるかは,sample のソースを見れば分かる。
> n <- 1e8
> m <- 1e5
> system.time(y <- sample(1:m, n, replace=TRUE))
ユーザ システム 経過
3.281 0.485 3.741
> system.time(y <- sample(m, n, replace=TRUE))
ユーザ システム 経過
1.781 0.162 1.932
※コメント投稿者のブログIDはブログ作成者のみに通知されます