用 keep() 和 discard() 分组
我们想把结果分成两组:大于 100 的天数,以及小于 100 的天数。我们将组合使用 keep() 和 discard() 来完成。
为什么要用两个函数?难道不能只用一个函数?能不能创建一个名为 is_less_than_hundred 的 mapper?
当然可以,但那样更容易出错:从
keep()切换到discard()比复制粘贴要容易得多。把两个函数结合起来,我们只需要一个 mapper。这意味着如果想要修改阈值,只需改一次;如果使用两个 mapper,就得改两次。
这是您在编程时应该尽量遵循的原则:编写代码时要让「需要改一处,就只改一处」。
all_visits 仍在您的工作区中可用。
本练习是课程的一部分
使用 purrr 的函数式编程进阶
练习说明
- 对
all_visits使用set_names()并映射,给元素加上星期名称:得到all_visits_named。 - 创建一个名为
threshold的 mapper,用于测试.x是否大于 100。 - 通过保留大于 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, ___))