始める無料で始める

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, ___))
コードを編集して実行