Wprowadzenie do mapperów

Funkcyjne programowanie średnio zaawansowane z purrr

Colin Fay

Data Scientist & R Hacker at ThinkR

.f w purrr

Funkcja:

  • dla każdego elementu .x
  • wykonaj .f(.x, ...)

Liczba $n$:

  • dla każdego elementu .x
  • wykonaj .x[$n$]

Wektor znakowy $z$

  • dla każdego elementu .x
  • wykonaj .x[$z$]
Funkcyjne programowanie średnio zaawansowane z purrr

.f jako funkcja

Gdy .f jest funkcją, może być:

  • Klasyczną funkcją
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

 

  • Funkcją lambda (anonimową)
map_dbl(visit_2014, function(x) {
  round(mean(x))
})
 [1]  5526  6546  6097  7760
 [5]  7025  7162 10484  8256
 [9]  6558  7686  5723  5053
Funkcyjne programowanie średnio zaawansowane z purrr

Mappery: część 1

mapper: funkcja anonimowa z formułą jednostronną

# Z jednym parametrem 
map_dbl(visits2017, ~ round(mean(.x)))

# Równoważne z 
map_dbl(visits2017, ~ round(mean(.)))

# Równoważne z 
map_dbl(visits2017, ~ round(mean(..1)))
Funkcyjne programowanie średnio zaawansowane z purrr

Mappery: część 2

mapper: funkcja anonimowa z formułą jednostronną

# Z dwoma parametrami
map2(visits2016, visits2017, ~ .x + .y)

# Równoważne z 
map2(visits2016, visits2017, ~ ..1 + ..2)
# Z więcej niż dwoma parametrami
pmap(list, ~ ..1 + ..2 + ..3)
Funkcyjne programowanie średnio zaawansowane z purrr

as_mapper()

as_mapper(): tworzenie obiektów mapper z funkcji lambda

# Klasyczna funkcja 
round_mean <- function(x){
    round(mean(x))
}
# Jako mapper
round_mean <- as_mapper(~ round(mean(.x))))
Funkcyjne programowanie średnio zaawansowane z purrr

Dlaczego mappery?

Mappery są:

  • Zwięzłe

  • Czytelne

  • Wielokrotnego użytku

Tworzenie mapperów

Funkcyjne programowanie średnio zaawansowane z purrr

Czas na ćwiczenia!

Funkcyjne programowanie średnio zaawansowane z purrr

Preparing Video For Download...