5 資料的工作流
5.1 %>% 運算子
在 R 語言中我們使用 %>%
運算子建立資料的工作流(The workflow of data),稱作為 Forward Pipe,使用之前,必須要安裝和載入 magrittr
這個套件:
# 安裝 magrittr 套件 ---------
install.packages("magrittr")
# 載入 magrittr 套件 ---------
library(magrittr)
我們傳統呼叫函數的習慣是將輸入(inputs)放置在函數名稱的小括號中;但是在使用 %>%
運算子的時候,我們將輸入放置在 %>%
運算子的左邊,並且將函數放置在 %>%
運算子的右邊,看起來就像是把輸入丟入函數中的樣子:
abs(-5:5) # 傳統
-5:5 %>% abs() # Foreward Pipe
%>%
運算子是 R 語言將物件導向編程(Object Oriented Programming)中的 鏈結方法(Chaining Methods)過渡到函數編程(Functional Programming)的重要因子,當我們需要不停地將前一個函數的輸出作為下一個函數的輸入時,就是 %>%
運算子上場的適當時機!
請考慮以下這個例子:
假設我們現在有一個需求是把系統日期的年份擷取出來,並且轉換為數字,我們可能會這樣寫:
sys_date <- Sys.Date()
sys_date_yr <- format(sys_date, format = "%Y")
sys_date_num <- as.numeric(sys_date_yr)
sys_date_num
## [1] 2018
這樣寫的可讀性(Readibility)很高,但是為了得到我們要的答案,過程中額外建立了 sys_date
與 sys_date_yr
這兩個物件,好像不是太有效率,那麼我們試著把上面這段程式改寫得精簡一點:
sys_date_num <- as.numeric(format(Sys.Date(), format = "%Y"))
sys_date_num
## [1] 2018
這樣寫雖然精簡,但是可讀性就變得比較低,尤其是小括號很多,我們都不喜歡去檢查哪個左括號應該對應哪個右括號。在這種呼叫多次函數,並且需要將前一次函數的輸出作為後一次函數的輸入時,就應該想到使用 %>%
:
library(magrittr)
sys_date_num <- Sys.Date() %>%
format(format = "%Y") %>%
as.numeric()
sys_date_num
## [1] 2018
這樣的寫法就兼顧了可讀性高與精簡的兩個優點!