Introduktion till mappers

Funktionell programmering på mellannivå med purrr

Colin Fay

Data Scientist & R Hacker at ThinkR

.f i purrr

En funktion:

  • för varje element i .x
  • kör .f(.x, ...)

Ett tal $n$:

  • för varje element i .x
  • kör .x[$n$]

En teckensträng $z$

  • för varje element i .x
  • kör .x[$z$]
Funktionell programmering på mellannivå med purrr

.f som en funktion

När .f är en funktion kan den vara antingen:

  • En klassisk 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

 

  • En lambda- (eller anonym) 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
Funktionell programmering på mellannivå med purrr

Mappers: del 1

mapper: anonym funktion med en ensidig formel

# Med en parameter 
map_dbl(visits2017, ~ round(mean(.x)))

# Är ekvivalent med 
map_dbl(visits2017, ~ round(mean(.)))

# Är ekvivalent med 
map_dbl(visits2017, ~ round(mean(..1)))
Funktionell programmering på mellannivå med purrr

Mappers: del 2

mapper: anonym funktion med en ensidig formel

# Med två parametrar
map2(visits2016, visits2017, ~ .x + .y)

# Är ekvivalent med 
map2(visits2016, visits2017, ~ ..1 + ..2)
# Med fler än två parametrar
pmap(list, ~ ..1 + ..2 + ..3)
Funktionell programmering på mellannivå med purrr

as_mapper()

as_mapper(): skapar mapper-objekt från en lambdafunktion

# Klassisk funktion 
round_mean <- function(x){
    round(mean(x))
}
# Som en mapper
round_mean <- as_mapper(~ round(mean(.x))))
Funktionell programmering på mellannivå med purrr

Varför mappers?

Mappers är:

  • Koncisa

  • Lättlästa

  • Återanvändbara

Skapa mappers

Funktionell programmering på mellannivå med purrr

Nu kör vi en övning!

Funktionell programmering på mellannivå med purrr

Preparing Video For Download...