使用purrr package學functional programming的觀念(ㄧ):簡介

purrr package 是Hadley Wickham和Lionel Henry所開發的,補強R base中原本的fucntional programming tool,帶入其他語言的特性,整體的風格是使用underscore.js, lodashlazy.js的語法。

R base語法中本身就有很多函數帶有部分Functional Programming意味的風格,如any,which,do.call,apply, sapply, vapply,lapply等等,只是沒有好好的統一,Hadley Wickham恰好把這部分補足了, 且裡頭的函數都是所謂的type-stable pure function導向,正如其package的名稱purrrr。

functional programming 其實是奠基在lambda calulus的觀念上,專注在四個基石上:資料(numbers, strings)、變數(函數的參數)、函數、函數應用(如何用函數修飾函數),概念上有點像是把Object-oriented programming中,function變成一個object,且專注於function功能的實現,用function去處理另一個function,去減少loop傳統寫法的使用,和重複性argument使用的麻煩。

基本上,purrr package中的函數便是依照許多其他functional programming導向的語言如scala、erlang、lisp等等特性來做的,簡單有這幾類的函數:

Category    Related Function    
Map      map(), map_chr(), map_int(), map_dbl(), map_df(), walk()
Reduce      reduce(), reduce_right()
Search      contains(), detect(), detect_index()
Filter   keep(), discrad(), every(), some()

而觀念上的一些使用如recursion寫法、expression的應用等,都可以簡化和提高代碼的效果。

這整個項目的特性:
1. 將函數輸入輸出的特性統一且分開,相對於原生的函數,常常因為輸入的資料格式不同,也會輸出不同的結果,這某些方面的“聰明”,在purrr中都簡潔化,但相對的就會產生很多相同功能,但對應不同資料格式的函數如map_chr(), map_dbl()等。
2. 將pipe %>% 的適用性導入purrr中
3.  改善function error handling的機制(使用safely())

這邊收集相關的發佈資料,能更理解這purrr項目相關進展的脈絡!(把purrr package稱為項目,是覺得這package的開發很有野心,想要把R語言在往可以適應於分散式運算系統,且整個代碼也是在一整個tidyverse下的邏輯開發的,很有一貫性)
purrr 0.1.0 2015/9/29

purrr 0.2.0 2016/1/06

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s