Rでデータ解析を始めよう013 lapply関数のキホン的な使い方

Rでデータ解析を始めよう013 lapply関数のキホン的な使い方

モモノキ&ナノネと一緒に統計ソフトRの使い方を学習していきます。

モモノキ&ナノネと一緒にR関数の使い方を練習しよう





データの要素ごとに処理を適用できるlapply関数のキホン的使い方

ナノネ、統計解析用フリーソフト『R』の使い方を練習するよ。今回はapplyファミリーのひとつでlapply関数を使ってみよう。

apply、sapplyに続いて今度はlapply関数だね。

モモノキ、lapply関数はどんな処理ができるの?

引き数でデータ(オブジェクト)と関数を渡すと、データの各要素ごとに関数を適用してくれるのはsapply関数と同じ感じ。ただしsapplyと違って返りのデータ型は必ずリストになるよ。

実際にlapply関数を使って試してみよう。

ラジャー。

sapply関数と同じで、第1引数にデータ(オブジェクト)、第2引数に関数を指定すれば実行できるよ(第3引数以降は第2引数に指定した関数の第2引数以降に利用できるんだけど、ややこしいから今回も扱わないよ)。

最初はベクトルデータをlapply関数に渡してみよう。今回も引数の関数は単純に入力値を2倍するだけにするね。

In [1]:
X_vector <- c(1, 2, 3, 4, 5) # ベクトルデータ
print(X_vector)
class(X_vector)

result <- lapply(X_vector, function(x){x * 2})
print(result)
class(result)
[1] 1 2 3 4 5
'numeric'
[[1]]
[1] 2

[[2]]
[1] 4

[[3]]
[1] 6

[[4]]
[1] 8

[[5]]
[1] 10

'list'

前回のsapply練習コードをコピペしてlapplyに変えただけだね。要素が全て2倍で、返りのデータ型は確かにリストになってるね。

次はリストをデータとして渡してみよう。

In [2]:
X_list <- list(1:5) # リストデータ
print(X_list)
class(X_list)

result <- lapply(X_list, function(x){x * 2})
print(result)
class(result)
[[1]]
[1] 1 2 3 4 5

'list'
[[1]]
[1]  2  4  6  8 10

'list'

当然、返りはリスト。

次は行列をデータとして渡してみよう。

In [3]:
X_matrix <- matrix(1:6, ncol=3) # 行列データ
print(X_matrix)
class(X_matrix)

result <- lapply(X_matrix, function(x){x * 2})
print(result)
class(result)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
'matrix'
[[1]]
[1] 2

[[2]]
[1] 4

[[3]]
[1] 6

[[4]]
[1] 8

[[5]]
[1] 10

[[6]]
[1] 12

'list'

やっぱり返りの型はリスト。

データフレームも試してみよう。

In [4]:
X_df <- data.frame(x1=1:5, x2=6:10, x3=11:15) # データフレーム
print(X_df)
class(X_df)

result <- lapply(X_df, function(x){x * 2})
print(result)
class(result)
  x1 x2 x3
1  1  6 11
2  2  7 12
3  3  8 13
4  4  9 14
5  5 10 15
'data.frame'
$x1
[1]  2  4  6  8 10

$x2
[1] 12 14 16 18 20

$x3
[1] 22 24 26 28 30

'list'

リストで返ってくるね。

要素ごとに何か処理を実行したときは、sapply関数を使えばいいのね。

もしリストの要素ごとに合計するなら、関数にsumを使ってこんな感じかな?

In [5]:
X_list2 <- list(1:5, 1:10, 1:3, 1:20) # リストデータ
print(X_list2)
class(X_list2)

result <- lapply(X_list2, sum)
print(result)
class(result)
[[1]]
[1] 1 2 3 4 5

[[2]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[3]]
[1] 1 2 3

[[4]]
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

'list'
[[1]]
[1] 15

[[2]]
[1] 55

[[3]]
[1] 6

[[4]]
[1] 210

'list'

上と同じデータをsapply関数で処理した場合は...

In [6]:
X_list2 <- list(1:5, 1:10, 1:3, 1:20) # リストデータ
print(X_list2)
class(X_list2)

result <- sapply(X_list2, sum) # sapply関数に変更
print(result)
class(result)
[[1]]
[1] 1 2 3 4 5

[[2]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[3]]
[1] 1 2 3

[[4]]
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

'list'
[1]  15  55   6 210
'integer'

sapply関数で処理した場合は、ベクトルで返ってくるね。

まだ使いどころが良くわからないけど、少しずつ試してみるよ。

lapply関数の練習は以上で。
またね!





スポンサーリンク

0 件のコメント :

コメントを投稿