【R】初心者向けapply関数の使い方

スポンサーリンク

apply関数が全くわからなかったので勉強しました。

何が便利?

apply系関数のメリットは以下の通りです。

  • 繰り返し分(forやwhile)を使わなくても行や列を一括処理できる
  • リスト型の要素に関数を適用できる

確かにこれまで、「for文遅いな」とか「リスト型とかどうやって扱うんだよ」って思ってました。

apply系関数が使えると幅が広がりそうです。

関数 用法
apply 行列の各行、各列、各要素に関数を一括適用する。
lapply リスト型のデータに関数を一括適用する。
sapply リスト型のデータに関数を一括適用し、結果を行列で返す。

applyの使い方

#マトリックス作成
> d <- matrix (1:6, ncol=3)
> d
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

このデータに行列に対して、繰り返し文を使わずに関数を適用したいと思います。

#各行の平均を求める
> apply(d, 1, mean) #行へのアクセスは第2引数に1を指定する
[1] 3 4

> #各列の平均を求める
> apply(d, 2, mean)
[1] 1.5 3.5 5.5

> #行列の平均を求める
> #(各要素へのアクセスは第2引数にc(1,2)を指定する)
> apply(d, c(1,2), mean)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

lapply, sapplyの使い方

5人の男女がいて、それぞれの得点が平均80、分散2の正規分布に従うと仮定して敢えてデータをリストにしてみます。

#リスト作成
> d <- list(id = 1:5, male = c(TRUE, FALSE), score = rnorm(5, 80, 2))
> d
$id
[1] 1 2 3 4 5

$group
[1] "a" "b"

$score
[1] 79.73968 80.02549 79.49212 81.84461 82.63033

それぞれのリスト要素の平均を求めてみます。

#lapplyは結果がリストで返ってくる
> lapply(d, mean)
$id
[1] 3

$male
[1] 0.5

$score
[1] 79.27305

#sapplyは結果が行列で返ってくる
> sapply(d, mean)
      id     male    score
 3.00000  0.50000 79.27305

sapplyの方が結果が行列で返ってくるので使いやすそうですね。

参考

スポンサーリンク

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です