日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

apply関数の使い方

  • apply関数はmatrixもしくはdata.frameに対してfor文と同じ効果を示します。全てのrow、もしくは全てのcolumn 方向に対して特定の処理を行う場合に便利です。
  • apply関数はapply(object, 処理方向の指定, 関数, 関数の第2引数以降の指定,...)で定義します。
    • 第1引数のobjectはmatrixかdata.frameです。
    • 第2引数の処理方向の指定はrow方向なら1、column方向なら2を座標毎ならc(1,2)を指定します。
    • 第3引数の関数は、apply関数の処理内で、その関数自体の第1引数がobjectのrowもしくはcolumnデータを使った処理を行います。そして、その関数が第2引数を持つ場合は、apply関数の第4引数以降に指定します。
> x <- matrix(-6:5,nrow=2,dimnames=list(1:2,letters[1:6]))
> apply(x,1,sum) # row 方向の合計を計算
1 2
-6 0
  • これをfor 文で記載すると
> y <- NULL
> for(i in 1:nrow(x)) y <- c(y,sum(x[i,]))

となります。

  • 第4匹数を使う例
> x[1,3] <- NA
> apply(x,1,sum) # row 方向の合計を計算、x[1,3] がNA が影響する
1 2
NA 0
> apply(x,1,sum,na.rm=TRUE) # NA を無視する引数を指定すると良い
1 2
-4 0
  • また、apply(x,1,sum)にはラッパー関数が存在します。
> rowSums(x,na.rm=TRUE) # apply(x,1,sum) と同義
> colSums(x,na.rm=TRUE) # apply(x,2,sum) と同義

みたいな使い方ができます。