Rで繰り返し処理するなら、forではなくsapply

R
この記事は約4分で読めます。

R言語で繰り返し処理を実装する場合は、for()ではなくsapply()を使いましょう!

なぜなら、for()では複数行のコーディングが必要なケースでも、sapply()ならたった1行で代替できることがあるからです。

以下は、ドリップコーヒーのサイズに対する価格を返す処理を繰り返し処理するコード例です。

#ドリップコーヒーのサイズ別価格表データ(スタバ)
drip <- data.frame(
  Size = c("Short","Tall","Grande","Venti"),
  Price = c(290,330,370,410)
)

#サイズを入力すると価格を返す関数
get_price <- function(c){
  idx <- which(drip$Size==c)
  return(ifelse(length(idx) == 0,NA,drip$Price[idx])) #メニューに存在しないサイズの価格は欠損値とする
  #dplyrのif_else関数だとエラーになる
}
get_price("Shor") #NAが返ってくる
get_price("Short") #290が返ってくる

#サイズを記録した注文リスト(BigtとLargeはメニューに存在しない)
order_list <- c("Short","Tall","Big","Grande","Venti","Tall","Large","Short","Short","Tall")

#for()で戻り値が格納されるリストの作成(sapply()の場合は不要)
order_price <- NULL

#for()による繰り返し処理
for(i in 1:length(order_list)){
  order_price <- append(order_price,
                        get_price(order_list[i]))
}
order_price

#sapply()による繰り返し処理
sapply(order_list,get_price)

sapply()であれば、繰り返し処理を1行で実現できています。

for()で実行する場合は、戻り値が格納されるリストを事前に作成する必要がありますが、sapply()では不要です

Enjoy!!!

参考文献

現場で使えるデータ分析の「理論」と「実際の考え方」を最短コースで体験学習できる1冊です!

Rのサンプルコードもたくさん載っているので、手を動かしながら理論を学びたい方におすすめです。

コメント

タイトルとURLをコピーしました