SIZE(20){COLOR(magenta){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