Introduzione ai mapper

Programmazione funzionale intermedia con purrr

Colin Fay

Data Scientist & R Hacker at ThinkR

.f in purrr

Una funzione:

  • per ogni elemento di .x
  • esegui .f(.x, ...)

Un numero $n$:

  • per ogni elemento di .x
  • esegui .x[$n$]

Un vettore di caratteri $z$

  • per ogni elemento di .x
  • esegui .x[$z$]
Programmazione funzionale intermedia con purrr

.f come funzione

Quando è una funzione, .f può essere:

  • Una funzione classica
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

 

  • Una lambda (o funzione anonima)
map_dbl(visit_2014, function(x) {
  round(mean(x))
})
 [1]  5526  6546  6097  7760
 [5]  7025  7162 10484  8256
 [9]  6558  7686  5723  5053
Programmazione funzionale intermedia con purrr

Mapper: parte 1

mapper: funzione anonima con formula unilaterale

# Con un parametro 
map_dbl(visits2017, ~ round(mean(.x)))

# È equivalente a 
map_dbl(visits2017, ~ round(mean(.)))

# È equivalente a 
map_dbl(visits2017, ~ round(mean(..1)))
Programmazione funzionale intermedia con purrr

Mapper: parte 2

mapper: funzione anonima con formula unilaterale

# Con due parametri
map2(visits2016, visits2017, ~ .x + .y)

# È equivalente a 
map2(visits2016, visits2017, ~ ..1 + ..2)
# Con più di due parametri
pmap(list, ~ ..1 + ..2 + ..3)
Programmazione funzionale intermedia con purrr

as_mapper()

as_mapper(): crea oggetti mapper da una funzione lambda

# Funzione classica 
round_mean <- function(x){
    round(mean(x))
}
# Come mapper
round_mean <- as_mapper(~ round(mean(.x))))
Programmazione funzionale intermedia con purrr

Perché usare i mapper?

I mapper sono:

  • Concisi

  • Facili da leggere

  • Riutilizzabili

Crea mapper

Programmazione funzionale intermedia con purrr

Esercitiamoci!

Programmazione funzionale intermedia con purrr

Preparing Video For Download...