Introduction to mappers

Functional Programming ระดับกลางด้วย purrr

Colin Fay

Data Scientist & R Hacker at ThinkR

.f ใน purrr

ฟังก์ชัน:

  • สำหรับแต่ละสมาชิกของ .x
  • ทำ .f(.x, ...)

ตัวเลข $n$:

  • สำหรับแต่ละสมาชิกของ .x
  • ทำ .x[$n$]

เวกเตอร์ชนิด character $z$

  • สำหรับแต่ละสมาชิกของ .x
  • ทำ .x[$z$]
Functional Programming ระดับกลางด้วย purrr

.f แบบฟังก์ชัน

เมื่อ .f เป็นฟังก์ชัน สามารถใช้ได้ 2 รูปแบบ:

  • ฟังก์ชันทั่วไป
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

 

  • ฟังก์ชัน lambda (หรือฟังก์ชันนิรนาม)
map_dbl(visit_2014, function(x) {
  round(mean(x))
})
 [1]  5526  6546  6097  7760
 [5]  7025  7162 10484  8256
 [9]  6558  7686  5723  5053
Functional Programming ระดับกลางด้วย purrr

Mappers: ส่วนที่ 1

mapper: ฟังก์ชันนิรนามที่ใช้สูตร one-sided

# With one parameter 
map_dbl(visits2017, ~ round(mean(.x)))

# Is equivalent to 
map_dbl(visits2017, ~ round(mean(.)))

# Is equivalent to 
map_dbl(visits2017, ~ round(mean(..1)))
Functional Programming ระดับกลางด้วย purrr

Mappers: ส่วนที่ 2

mapper: ฟังก์ชันนิรนามที่ใช้สูตร one-sided

# With two parameters
map2(visits2016, visits2017, ~ .x + .y)

# Is equivalent to 
map2(visits2016, visits2017, ~ ..1 + ..2)
# With more than two parameters
pmap(list, ~ ..1 + ..2 + ..3)
Functional Programming ระดับกลางด้วย purrr

as_mapper()

as_mapper(): สร้างออบเจกต์ mapper จากฟังก์ชัน lambda

# Classical function 
round_mean <- function(x){
    round(mean(x))
}
# As a mapper
round_mean <- as_mapper(~ round(mean(.x))))
Functional Programming ระดับกลางด้วย purrr

ทำไมต้องใช้ mappers?

Mappers มีข้อดีดังนี้:

  • กระชับ

  • อ่านง่าย

  • นำกลับมาใช้ซ้ำได้

สร้าง mappers

Functional Programming ระดับกลางด้วย purrr

มาฝึกกันเถอะ!

Functional Programming ระดับกลางด้วย purrr

Preparing Video For Download...