17章 purrrでイテレーション
20191110:{purrr}の`map()`についての表記を無名関数を用いた表記に変更しました。
17.0 ライブラリの読み込み
library("tidyverse")
library("stringr")
library("microbenchmark")17.1 はじめに
17.2 for-loop
練習問題1 for-loopを書く
output <- vector("double", ncol(mtcars))
names(output) <- names(mtcars)
for (i in names(mtcars)) {
output[[i]] <- mean(mtcars[[i]])
}
output
mpg cyl disp hp drat wt qsec vs
20.090625 6.187500 230.721875 146.687500 3.596563 3.217250 17.848750 0.437500
am gear carb
0.406250 3.687500 2.812500
# apply(mtcars, 2, mean)
# map_dbl(mtcars, mean)
# mtcars %>%
# map_dbl(.x = ., .f = function(data){mean(data)}) 練習問題2 ベクトルを扱う既存の関数を利用して、以下の各例のforループを排除しなさい。
練習問題3 関数の作成とforループのスキルを組み合わせなさい。
17.3 重要なアトミックベクトル
練習問題1 files <- dir("data/", pattern = "\\.csv$", full.names = TRUE)のパスを使い、read_csv()で連続的にデータを読み込みなさい。また、単一のデータフレームにしなさい。
files <- dir("data/", pattern = "\\.csv$", full.names = TRUE)のパスを使い、read_csv()で連続的にデータを読み込みなさい。また、単一のデータフレームにしなさい。練習問題2 for (nm in names(x))でxに名前がない場合、どうなるのか。
for (nm in names(x))でxに名前がない場合、どうなるのか。練習問題3 データフレーム内の各数値列の平均とその名前を表示する関数を作成しなさい。たとえば、show_mean(iris)は次のように出力される。変数名の長さが異なっていても、数字がうまく並ぶようにするためにはどうするか。
show_mean(iris)は次のように出力される。変数名の長さが異なっていても、数字がうまく並ぶようにするためにはどうするか。練習問題4 このコードはどのように機能するのか。
17.4 for-loopと汎関数
練習問題1 apply()のドキュメントを読んで、2つのfor-loopを一般化しなさい。
apply()のドキュメントを読んで、2つのfor-loopを一般化しなさい。練習問題2 col_summary()が数値列にのみ適用されるようにしなさい。
col_summary()が数値列にのみ適用されるようにしなさい。17.5 Map関数
練習問題1 map()で下記を書きなさい。
map()で下記を書きなさい。練習問題2 データフレームの各列に対して、それがfactorであるかどうかを示す単一のベクトルを作成しなさい。
factorであるかどうかを示す単一のベクトルを作成しなさい。練習問題3 リストではないベクトルに対してmap()を使うとどうなるのか?map(1:5, runif)はどうなるのか。
map()を使うとどうなるのか?map(1:5, runif)はどうなるのか。
練習問題4 map(-2:2, rnorm, n = 5)とmap_dbl(-2:2, rnorm, n = 5)はどう違うのか。
map(-2:2, rnorm, n = 5)とmap_dbl(-2:2, rnorm, n = 5)はどう違うのか。練習問題5 map(x, function(df) lm(mpg ~ wt, data = df))の無名関数を削除するように書き直しなさい。
map(x, function(df) lm(mpg ~ wt, data = df))の無名関数を削除するように書き直しなさい。17.6 失敗への対処
17.7 複数の引数へのマッピン
17.7 Walk
17.8 for-loopの他のパターン
練習問題1 for-loopを使用して独自のevery()を実装します。purrr::every()と比較しなさい。
every()を実装します。purrr::every()と比較しなさい。練習問題2 col_summary()をデータフレーム内のすべての数値列に集計関数を適用する機能を作成しなさい。
col_summary()をデータフレーム内のすべての数値列に集計関数を適用する機能を作成しなさい。練習問題3 col_summary()をbaseで考えるとどうなるのか。
col_summary()をbaseで考えるとどうなるのか。最終更新