Giới thiệu về mappers

Lập trình hàm nâng cao với purrr

Colin Fay

Data Scientist & R Hacker at ThinkR

.f trong purrr

Một hàm:

  • với mỗi phần tử của .x
  • thực hiện .f(.x, ...)

Một số $n$:

  • với mỗi phần tử của .x
  • thực hiện .x[$n$]

Một vector ký tự $z$

  • với mỗi phần tử của .x
  • thực hiện .x[$z$]
Lập trình hàm nâng cao với purrr

.f là một hàm

Khi là một hàm, .f có thể là:

  • Một hàm thông thường
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

 

  • Một hàm lambda (hay ẩn danh)
map_dbl(visit_2014, function(x) {
  round(mean(x))
})
 [1]  5526  6546  6097  7760
 [5]  7025  7162 10484  8256
 [9]  6558  7686  5723  5053
Lập trình hàm nâng cao với purrr

Mappers: phần 1

mapper: hàm ẩn danh với công thức một vế

# Với một tham số 
map_dbl(visits2017, ~ round(mean(.x)))

# Tương đương với 
map_dbl(visits2017, ~ round(mean(.)))

# Tương đương với 
map_dbl(visits2017, ~ round(mean(..1)))
Lập trình hàm nâng cao với purrr

Mappers: phần 2

mapper: hàm ẩn danh với công thức một vế

# Với hai tham số
map2(visits2016, visits2017, ~ .x + .y)

# Tương đương với 
map2(visits2016, visits2017, ~ ..1 + ..2)
# Với nhiều hơn hai tham số
pmap(list, ~ ..1 + ..2 + ..3)
Lập trình hàm nâng cao với purrr

as_mapper()

as_mapper(): tạo đối tượng mapper từ hàm lambda

# Hàm thông thường 
round_mean <- function(x){
    round(mean(x))
}
# Dưới dạng mapper
round_mean <- as_mapper(~ round(mean(.x))))
Lập trình hàm nâng cao với purrr

Vì sao dùng mappers?

Mappers có đặc điểm:

  • Ngắn gọn

  • Dễ đọc

  • Tái sử dụng

Tạo mappers

Lập trình hàm nâng cao với purrr

Cùng luyện tập nào!

Lập trình hàm nâng cao với purrr

Preparing Video For Download...