Introduction aux mappers

Programmation fonctionnelle intermédiaire avec purrr

Colin Fay

Data Scientist & R Hacker at ThinkR

.f dans purrr

Une fonction :

  • pour chaque élément de .x
  • exécuter .f(.x, ...)

Un nombre $n$ :

  • pour chaque élément de .x
  • exécuter .x[$n$]

Un vecteur de caractères $z$

  • pour chaque élément de .x
  • exécuter .x[$z$]
Programmation fonctionnelle intermédiaire avec purrr

.f comme fonction

Quand c'est une fonction, .f peut être :

  • Une fonction classique
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

 

  • Une fonction lambda (anonyme)
map_dbl(visit_2014, function(x) {
  round(mean(x))
})
 [1]  5526  6546  6097  7760
 [5]  7025  7162 10484  8256
 [9]  6558  7686  5723  5053
Programmation fonctionnelle intermédiaire avec purrr

Mappers : partie 1

mapper : fonction anonyme avec une formule unilatérale

# Avec un paramètre 
map_dbl(visits2017, ~ round(mean(.x)))

# Équivalente à 
map_dbl(visits2017, ~ round(mean(.)))

# Équivalente à 
map_dbl(visits2017, ~ round(mean(..1)))
Programmation fonctionnelle intermédiaire avec purrr

Mappers : partie 2

mapper : fonction anonyme avec une formule unilatérale

# Avec deux paramètres
map2(visits2016, visits2017, ~ .x + .y)

# Équivalente à 
map2(visits2016, visits2017, ~ ..1 + ..2)
# Avec plus de deux paramètres
pmap(list, ~ ..1 + ..2 + ..3)
Programmation fonctionnelle intermédiaire avec purrr

as_mapper()

as_mapper() : créer des objets mapper à partir d'une fonction lambda

# Fonction classique 
round_mean <- function(x){
    round(mean(x))
}
# Comme mapper
round_mean <- as_mapper(~ round(mean(.x))))
Programmation fonctionnelle intermédiaire avec purrr

Pourquoi des mappers ?

Les mappers sont :

  • Concis

  • Faciles à lire

  • Réutilisables

Créer des mappers

Programmation fonctionnelle intermédiaire avec purrr

Passons à la pratique !

Programmation fonctionnelle intermédiaire avec purrr

Preparing Video For Download...