Einführung in Mappers

Fortgeschrittene funktionale Programmierung mit purrr

Colin Fay

Data Scientist & R Hacker at ThinkR

.f in purrr

Eine Funktion:

  • für jedes Element von .x
  • führe .f(.x, ...) aus

Eine Zahl $n$:

  • für jedes Element von .x
  • verwende .x[$n$]

Ein Zeichenvektor $z$

  • für jedes Element von .x
  • verwende .x[$z$]
Fortgeschrittene funktionale Programmierung mit purrr

.f als Funktion

Wenn eine Funktion, kann .f sein:

  • Eine klassische Funktion
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

 

  • Eine Lambda- (oder anonyme) Funktion
map_dbl(visit_2014, function(x) {
  round(mean(x))
})
 [1]  5526  6546  6097  7760
 [5]  7025  7162 10484  8256
 [9]  6558  7686  5723  5053
Fortgeschrittene funktionale Programmierung mit purrr

Mappers: Teil 1

mapper: anonyme Funktion mit einseitiger Formel

# Mit einem Parameter 
map_dbl(visits2017, ~ round(mean(.x)))

# Entspricht 
map_dbl(visits2017, ~ round(mean(.)))

# Entspricht 
map_dbl(visits2017, ~ round(mean(..1)))
Fortgeschrittene funktionale Programmierung mit purrr

Mappers: Teil 2

mapper: anonyme Funktion mit einseitiger Formel

# Mit zwei Parametern
map2(visits2016, visits2017, ~ .x + .y)

# Entspricht 
map2(visits2016, visits2017, ~ ..1 + ..2)
# Mit mehr als zwei Parametern
pmap(list, ~ ..1 + ..2 + ..3)
Fortgeschrittene funktionale Programmierung mit purrr

as_mapper()

as_mapper(): erstellt Mapper-Objekte aus einer Lambda-Funktion

# Klassische Funktion 
round_mean <- function(x){
    round(mean(x))
}
# Als Mapper
round_mean <- as_mapper(~ round(mean(.x))))
Fortgeschrittene funktionale Programmierung mit purrr

Warum Mappers?

Mappers sind:

  • Knapp

  • Gut lesbar

  • Wiederverwendbar

Mappers erstellen

Fortgeschrittene funktionale Programmierung mit purrr

Lass uns üben!

Fortgeschrittene funktionale Programmierung mit purrr

Preparing Video For Download...