Rコードの最適化例:ベクトルはベクトルとして操作する
Rコード最適化のコツと実例集 に戻る
X <- matrix(runif(1000000), nc=1000, nr=1000) test1 <- function (x) { s <- 0 for (i in 1:dim(x)[1]) for (j in 1:dim(x)[2]) s <- s + x[i, j] # 添字による操作! s } test2 <- function (x) { s <- 0 for (e in x) s <- s + e # R の for ループ範囲はベクトル・行列でも可! s # 順序が問題になる時は困る可能性 } system.time(test1(X)) [1] 3.39 0.01 3.40 0.00 0.00 # 添字操作は高くつく system.time(test2(X)) [1] 0.81 0.02 0.82 0.00 0.00 system.time(sum(X)) [1] 0.03 0.00 0.03 0.00 0.00 # もちろんこれは sum 関数を使えば済むこと