映射器简介

使用 purrr 的函数式编程进阶

Colin Fay

Data Scientist & R Hacker at ThinkR

purrr 中的 .f

函数:

  • 对 .x 的每个元素
  • 执行 .f(.x, ...)

数字 $n$:

  • 对 .x 的每个元素
  • 执行 .x[$n$]

字符向量 $z$

  • 对 .x 的每个元素
  • 执行 .x[$z$]
使用 purrr 的函数式编程进阶

.f 作为函数

当为函数时,.f 可以是:

  • 传统函数
my_fun <- function(x) {
  round(mean(x))
}
map_dbl(visit_2014, my_fun)
 [1]  5526  6546  6097  7760
 [5]  7025  7162 10484  8256
 [9]  6558  7686  5723  5053

 

  • lambda(匿名)函数
map_dbl(visit_2014, function(x) {
  round(mean(x))
})
 [1]  5526  6546  6097  7760
 [5]  7025  7162 10484  8256
 [9]  6558  7686  5723  5053
使用 purrr 的函数式编程进阶

映射器:第 1 部分

"映射器":用单边公式定义的匿名函数

# 一个参数 
map_dbl(visits2017, ~ round(mean(.x)))

# 等价于 
map_dbl(visits2017, ~ round(mean(.)))

# 等价于 
map_dbl(visits2017, ~ round(mean(..1)))
使用 purrr 的函数式编程进阶

映射器:第 2 部分

"映射器":用单边公式定义的匿名函数

# 两个参数
map2(visits2016, visits2017, ~ .x + .y)

# 等价于 
map2(visits2016, visits2017, ~ ..1 + ..2)
# 多于两个参数
pmap(list, ~ ..1 + ..2 + ..3)
使用 purrr 的函数式编程进阶

as_mapper()

as_mapper(): 基于 lambda 函数创建映射器对象

# 传统函数 
round_mean <- function(x){
    round(mean(x))
}
# 作为映射器
round_mean <- as_mapper(~ round(mean(.x))))
使用 purrr 的函数式编程进阶

为何使用映射器?

映射器具有:

  • 简洁

  • 易读

  • 可复用

创建映射器

使用 purrr 的函数式编程进阶

开始练习!

使用 purrr 的函数式编程进阶

Preparing Video For Download...