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 関数を使えば済むこと

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-03-25 (土) 11:19:17