R for data science之purrr包(上)

浏览: 3302

神器purrr包是Hadley Wickham大神编写的高级函数编程语言包,它可以填充R功能性编程中的缺失部分,使得你的编程更加函数化。

purrr包提供了大量的类似map的函数。可以服务于减少循环、处理嵌套数据、多模型等应用需求。

map()函数

library("purrr")    #加载包
data(mtcars) #使用数据集mtcars
head(mtcars) #查看mtcars数据的前五行
dim(mtcars) #查看数据mtcars的维度
##求mtcars数据的均值
map_dbl(mtcars, mean)
mtcars %>% map_dbl(mean)

image.png

##对mtcars的数据进行标准化

mtcars %>% map(function(x) (x - mean(x)/max(x)-min(x)))   # list
mtcars %>% map_df(function(x) (x - mean(x)/max(x)-min(x)))# data.frame

image.png

map2()

n <- list(4,5,6)
m <- list(1,2,3)
map2(m,n, `+`)

image.png

by_cyl <- mtcars %>% split(.$cyl)
mods <- by_cyl %>% map(~ lm(mpg ~ wt, data = .))
map2(mods, by_cyl, predict)

image.png

pmap()

x <- list(1, 10, 100)
y <- list(1, 2, 3)
z <- list(5, 50, 500)
pmap(list(x, y, z), sum)

image.png

pmap(list(x, y, z), function(a, b ,c) a / (b + c))

image.png

accumulate()        # 行列长度不变

mtcars[1,]
mtcars[1,] %>% accumulate(`+`) # 从左向右

image.png

mtcars[1,] %>% accumulate(`*`) 

image.png

mtcars[1,] %>% accumulate_right(`+`) # 从右向左

image.png

mtcars[1,] %>% accumulate_right(`*`)

image.png

 reduce ()      # 获得一个值

mtcars[,1]

image.png

mtcars[,1] %>% reduce(`+`)       # 从左向右

image.png

mtcars[,1] %>% reduce(`*`) 

image.png

mtcars[,1] %>% reduce_right(`+`) # 从右向左

image.png

mtcars[,1] %>% reduce_right(`*`)

image.png

detect () # 找到第一个匹配的值

mtcars[2,]
mtcars[2,] %>% detect(~. >50)

image.png

# detect_index()   并返回它的位置

mtcars[2,] %>% detect_index(~. >50)

image.png

some()  列表中的某些元素是否满足要求? 返回结果TRUE/FALSE

 every() 列表中的每个元素是否满足要求?

mtcars %>% some(is_numeric)

image.png

mtcars %>% some(is_character)

image.png

mtcars %>% every(is_numeric)

image.png

mtcars %>% every(is_character)

image.png

x <- list(1:5,'R','ruby','python')
x %>% every(is_character)

image.png

x %>% some(is_character)

image.png

x %>% every(is_numeric)

image.png

x %>% some(is_numeric)

image.png

推荐 1
本文由 邬书豪 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册