トップ 履歴 一覧 Farm ソース 検索 ヘルプ RSS ログイン

Rにおけるapply, for, whileの速度比較


キーワード

最終更新時間:2018年07月21日 01時45分11秒
アフィリエイト・広告について
プライバシーポリシー

はじめに

この記事中のスクリプト、実行結果はSlackチームr-wakalangにおいて"KS"さんが投稿したものです。

評価手法

  • Rのベクトル演算機能
  • forループ
  • whileループ

それぞれを使い、1から100までの整数について、x * (x + 1) の計算を100回繰り返し、その速度を計測しています。

実行結果

library(microbenchmark)

# 関数定義
# vector化
vectorize <- function(x) {
  sum(x * (x + 1))
}

# for_loop
for_loop <- function(x) {
  result <- 0
  for (i in x) {
    result <- result + (i * (i + 1))
  }
  return(result)
}

# while_loop
while_loop <- function(x) {
  result <- 0
  var <- x[1]
  while(var <= x[length(x)]) {
    result <- result + var * (var + 1)
    var <- var + 1
  }
  return(result)
}

# 速度比較
microbenchmark(vectorize(1:100), for_loop(1:100), while_loop(1:100))
# Unit: microseconds
#              expr    min      lq     mean  median     uq    max neval
#  vectorize(1:100)  1.007  1.0635  1.41549  1.1115  1.170 23.759   100
#   for_loop(1:100)  3.697  3.7970  4.24649  3.8355  3.925 23.033   100
# while_loop(1:100) 11.905 12.1145 12.91534 12.2780 12.512 68.246   100

カテゴリ: [R, r-wakalang]