list 是 R 特有的資料格式,具有不受資料格式與維度的儲存方式,像是不同格式的資料可以儲存在同一個 list;或是將畫好的圖片結果存在 list 中;或是將模型的訓練結果存在 list。 其中靈活的特性,也讓小編越用越喜歡將整理好的資料儲存成這樣 list 的資料格式。今天要介紹 nested list data 格式的應用套件,其實 nested list data 也不會太難懂,就是將多個 data.frame 依序存在一個 list 中,那麼以往要處理這種資料可能使用 lapply,如果 lapply 不能解決就只好使用迴圈解決了,今天要介紹的 purrr 提供了另一個避免寫迴圈的方式。
R 套件 Purrr
Purrr 主要是補足 base apply 函數的不足,針對 list 格式運算做更完整的向量運算執行套件。其中如果你已經習慣 R 特有的 pipe-operator 那麼 Purrr 一定要好好讀一下。
R 實作
這次實作使用內建 iris 資料,練習建立 nested list 格式資料的線性回歸,例子很簡單,但是應用卻很廣泛喔。
install.packages("purrr") install.packages("tidyr") install.packages("dplyr") library(purrr) library(tidyr) library(dplyr) data(iris) head(iris) #將資料依照 Species 切割成不同的 data.frasme n_iris <- iris %>% group_by(Species) %>% nest() #建立 function mod_fun <- function(df) { lm(Sepal.Length ~ ., data = df) } #使用 map 函數建立對應的線性模型,並儲存成 nest list 格式 m_iris <- n_iris %>% mutate(model = map(data, mod_fun))
結論
Purrr 補足了 R 原先對於 list 缺少的向量化運算部分,讓使用者可以在 list 格式下做更多的事情,並且多使用 list 格式可以有效的管理資料、訓練好的模型結果、繪圖結果。