使用 purrr 的程式設計入門

使用 purrr 的 R 語言中級函式程式設計

Colin Fay

Data Scientist & R Hacker at ThinkR

$whoami

講師 Colin Fay 喝咖啡

使用 purrr 的 R 語言中級函式程式設計

認識 purrr

使用 purrr 的 R 語言中級函式程式設計

本課會涵蓋什麼?

map 基本骨架

來源:Charlotte Wickham — A introduction to purrr

使用 purrr 的 R 語言中級函式程式設計

法國聖馬洛的開放資料入口網站

使用 purrr 的 R 語言中級函式程式設計

purrr 基礎複習(第 1 部分)

map(.x, .f, ...)

  • 對 .x 的每個元素
  • 執行 .f(.x, ...)
  • 回傳 list
res <- map(visit_2015, sum) 
class(res)
"list"

map_dbl(.x, .f, ...)

  • 對 .x 的每個元素
  • 執行 .f(.x, ...)
  • 回傳 numeric 向量
res <- map_dbl(visit_2015, sum) 
class(res)
"numeric"
使用 purrr 的 R 語言中級函式程式設計

purrr 基礎複習(第 2 部分)

map2(.x, .y, .f, ...)

  • 對 .x 與 .y 的每個元素
  • 執行 .f(.x, .y, ...)
  • 回傳 list
res <- map2(visit_2015,
            visit_2016,
            sum)
class(res)
"list"

map2_dbl(.x, .f, ...)

  • 對 .x 與 .y 的每個元素
  • 執行 .f(.x, .y, ...)
  • 回傳 numeric 向量
res <- map2_dbl(visit_2015,
                visit_2016,
                sum)
class(res)
"numeric"
使用 purrr 的 R 語言中級函式程式設計

purrr 基礎複習(第 3 部分)

pmap(.l, .f, ...)

  • 對 .l 的每個子清單
  • 執行 f(..1, ..2, ..3, [etc], ...)
  • 回傳 list
l <- list(visit_2014,
          visit_2015,
          visit_2016)
res  <- pmap(l, sum)
class(res)
"list"

pmap_dbl(.l, .f, ...)

  • 對 .l 的每個子清單
  • 執行 f(..1, ..2, ..3, [etc], ...)
  • 回傳 numeric 向量
l <- list(visit_2014,
          visit_2015,
          visit_2016)
res <- pmap_dbl(l, sum)
class(res)
"numeric"
使用 purrr 的 R 語言中級函式程式設計

一起來練習吧!

使用 purrr 的 R 語言中級函式程式設計

Preparing Video For Download...