10章スピード

データサイエンティストには、スピードが必要です。コードが高速なら、もっと大きなデータを使ってもっと意欲的な仕事をすることができます。この章では、Rで高速なコードを書くためのある方法を説明します。そして、この方法を使ってスロットマシンの1千万回の実行をシミュレートします。

10.1 ベクトル化コード

コードはさまざまな方法で書くことができますが、もっとも高速なRコードは、論理テスト、添字操作、要素単位の実行の3つを利用しているのが普通です。これらはRがもっともうまく実行できる処理です。これらのものを使っているコードは、一般にベクトル化という一定の特徴を備えています。この種のコードは、入力値としてベクトルを受け取り、ベクトル内の個々の値を同時に操作できます。

ベクトル化されたコードがどのようなものかを理解するために、絶対値を計算する関数について2つの例で比較してみましょう。これらはそれぞれ数値のベクトルをとり、それを絶対値(正数)のベクトルに変換します。第1の例はベクトル化されていません。abs_loopforループを使って1度に1つずつベクトルの各要素を操作します。

abs_loop <- function(vec){
  for (i in 1:length(vec)) {
    if (vec[i] < 0) {
      vec[i] <- -vec[i]
    }
  }
vec
}

第2の例、abs_setabs_loopをベクトル化したものです。この関数は論理添字を使ってベクトル内のすべての負数を同時に操作します。

abs_set <- function(vec){
  negs <- vec < 0
  vec[negs] <- vec[negs] * -1
  vec
}

Get RStudioではじめるRプログラミング入門 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.