ทำไมต้องเขียนโค้ดให้สะอาด?

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

Colin Fay

Data Scientist & R Hacker

หา Waldo ให้เจอ

library(broom)
library(dplyr)
lm(Sepal.Length ~ Species, data=iris) %>% tidy() %>% filter(p.value < 0.05)
lm(Pepal.Length ~ Species, data=iris) %>% tidy() %>% filter(p.value < 0.05)
lm(Sepal.Width ~ Species, data=iris) %>% tidy() %>% filter(p.value < 0.05)
lm(Sepal.Length ~ Species, data=iris) %>% tidy() %>% ilter(p.value < 0.05)
Functional Programming ระดับกลางด้วย purrr

พบ Waldo แล้ว

library(purrr)
tidy_iris_lm <- compose(
  as_mapper(~ filter(.x, p.value < 0.05)), 
  tidy, 
  partial(lm, data=iris, na.action = na.fail)
)

list( Petal.Length ~ Petal.Width, Petal.Width ~ Sepal.Width, Sepal.Width ~ Sepal.Length ) %>% map(tidy_iris_lm)
Functional Programming ระดับกลางด้วย purrr

โค้ดที่สะอาดคืออะไร?

โค้ดที่สะอาดมีคุณสมบัติ:

  • กระชับ
  • อ่านง่าย
  • เข้าใจได้ทันที
  • ดูแลรักษาง่าย
Functional Programming ระดับกลางด้วย purrr

compose()

การประกอบฟังก์ชัน:

library(purrr)

rounded_mean <- compose(round, mean)
rounded_mean(1:2811)
1406
Functional Programming ระดับกลางด้วย purrr

เขียนโค้ดให้สะอาดขึ้นด้วย compose

# FROM
round(mean(1:10))
round(mean(1:100))
round(mean(1:1000))
round(mean(1:10000))
#TO
round(median(1:10))
round(median(1:100))
round(median(1:1000))
round(median(1:10000))

-> 4 การเปลี่ยนแปลง

# FROM
my_stats <- compose(round, mean)
my_stats(1:10)
my_stats(1:100)
my_stats(1:1000)
my_stats(1:10000)
#TO
my_stats <- compose(round, median)
my_stats(1:10)
my_stats(1:100)
my_stats(1:1000)
my_stats(1:10000)

-> 1 การเปลี่ยนแปลง

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

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

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

Preparing Video For Download...