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のサンプルコードもたくさん載っているので、手を動かしながら理論を学びたい方におすすめです。
リンク
コメント