読者です 読者をやめる 読者になる 読者になる

foreachとldplyを使ってforループの記述から脱却しよう

例えば、ある関数をforループで毎回呼び出して処理させている時は、foreachとldplyに置き換えられる。
一般に、後者の方が処理速度が早いらしい。

ま、そんな言語設計してる時点でどうかしてると思うがな!

GetSum <- function(a){
  x <- a + 1 + 2
  return_df <- data.frame(a, x)
  return(return_df)
}

range_vec <- 1:10

# forループを使う場合
df_by_for <- data.frame()
for (a in range_vec){
  return_df <- GetSum(a)
  df_by_for <- rbind(df_by_for, return_df)
}

# ldplyを使う場合
df_by_ldply <- ldply(foreach (a=range_vec, combine=rbind) %do% { # doparにすると、並列で処理してくれる。並列でなくともいいときは%do%
    GetSum(a)
})

どちらのケースも下のデータフレームが得られる

    a  x
1   1  4
2   2  5
3   3  6
4   4  7
5   5  8
6   6  9
7   7 10
8   8 11
9   9 12
10 10 13