keep() と discard() で分ける
結果を2つのグループに分けたいと思います。100を超える日と、100未満の日です。そのために keep() と discard() を組み合わせます。
なぜ2つの関数が必要なのでしょうか?1つの関数ではだめですか?is_less_than_hundred というマッパーを作れないでしょうか?
作ることはできますが、エラーの原因になりやすくなります。
keep()とdiscard()は切り替えるだけで済み、コピペより安全です。2つの関数を組み合わせれば、必要なのは1つのマッパーだけです。つまり、しきい値を変えたいときは1か所だけ変えればよく、2つのマッパーを用意した場合のように2か所を直す必要がありません。
これはコーディングで心がけたいルールです。何かを変更する必要が出たとき、1か所だけ直せば済むようにコードを書きましょう。
all_visits はワークスペースに用意されています。
この演習はコースの一部です
purrr で学ぶ中級関数型プログラミング
演習の手順
set_names()をall_visitsに対して map し、曜日名を付けてall_visits_namedを作成します。.xが100を超えるかを判定するマッパーthresholdを作成します。- 100を超える要素を保持して
group_overを作成します。 - 100を超える要素を捨てて
group_underを作成します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Set the name of each subvector
day <- c("mon", "tue", "wed", "thu", "fri", "sat", "sun")
all_visits_named <- ___(all_visits, ~ ___(.x, ___))
# Create a mapper that will test if .x is over 100
threshold <- ___
# Run this mapper on the all_visits_named object: group_over
group_over <- ___(all_visits_named, ~ ___(.x, ___))
# Run this mapper on the all_visits_named object: group_under
group_under <- ___(all_visits_named, ~ ___(.x, ___))