R 處理 nested list data - purrr

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 格式可以有效的管理資料、訓練好的模型結果、繪圖結果。

發表迴響

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

WordPress.com 標誌

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

Google+ photo

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

Twitter picture

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

Facebook照片

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

連結到 %s