R for data science之purrr包(上)
神器purrr包是Hadley Wickham大神編寫的高級函數編程語言包,它可以填充R功能性編程中的缺失部分,使得你的編程更加函數化。
purrr包提供了大量的類似map的函數。可以服務於減少循環、處理嵌套數據、多模型等應用需求。
map()函數
rm(list=ls())library("purrr") #載入包data(mtcars) #使用數據集mtcarshead(mtcars) #查看mtcars數據的前五行dim(mtcars) #查看數據mtcars的維度##求mtcars數據的均值map_dbl(mtcars, mean)mtcars %>% map_dbl(mean)
##對mtcars的數據進行標準化mtcars %>% map(function(x) (x - mean(x)/max(x)-min(x))) # listmtcars %>% map_df(function(x) (x - mean(x)/max(x)-min(x)))# data.frame
map2()
n <- list(4,5,6)m <- list(1,2,3)map2(m,n, `+`)
by_cyl <- mtcars %>% split(.$cyl)mods <- by_cyl %>% map(~ lm(mpg ~ wt, data = .))map2(mods, by_cyl, predict)
pmap()
x <- list(1, 10, 100)y <- list(1, 2, 3)z <- list(5, 50, 500)pmap(list(x, y, z), sum)
pmap(list(x, y, z), function(a, b ,c) a / (b + c))
accumulate() # 行列長度不變
mtcars[1,]mtcars[1,] %>% accumulate(`+`) # 從左向右
mtcars[1,] %>% accumulate(`*`)
mtcars[1,] %>% accumulate_right(`+`) # 從右向左
mtcars[1,] %>% accumulate_right(`*`)
reduce () # 獲得一個值
mtcars[,1]
mtcars[,1] %>% reduce(`+`) # 從左向右
mtcars[,1] %>% reduce(`*`)
mtcars[,1] %>% reduce_right(`+`) # 從右向左
mtcars[,1] %>% reduce_right(`*`)
detect () # 找到第一個匹配的值
mtcars[2,]mtcars[2,] %>% detect(~. >50)
# detect_index() 並返回它的位置
mtcars[2,] %>% detect_index(~. >50)
some() 列表中的某些元素是否滿足要求? 返回結果TRUE/FALSE
every() 列表中的每個元素是否滿足要求?
mtcars %>% some(is_numeric)
mtcars %>% some(is_character)
mtcars %>% every(is_numeric)
mtcars %>% every(is_character)
x <- list(1:5,R,ruby,python)x %>% every(is_character)
x %>% some(is_character)
x %>% every(is_numeric)
x %>% some(is_numeric)
文末彩蛋
R for data science
推薦閱讀:
※BI轉數據挖掘,我的脫產學習路
※七周成為數據分析師:Excel技巧:好用到哭的多級菜單
※YARN 分散式資源調度
※人工智慧和機器學習會逐漸取代金融和數據分析師嗎?