purrr包map系列函数的基本包写法:lapply/Map/mapply
作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言高效数据处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书)。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。
purrr包中的核心函数就是map、map2和pmap(其他强制类型转换多有冗余),这些函数其实用base中的lapply和mapply/Map完全可以替代,其主要特点是purrr总是希望把数据放在前面,函数放在后面,但是基本包没有维持这个统一;其次就是purrr里面可以用“~”作为函数定义的简写(刻意创造了一套“简洁”的新规范)。
作为代码维护的基本原则就是,能用基本包的函数就不要依赖包,以保证代码能够长期有效。所以,这里给出purrr核心函数的基本包替代,以供参考。
library(purrr)
# map和lapply的使用基本是一样的
map(1:10,rnorm, n = 10)
lapply(1:10,rnorm, n = 10)
# map2只能接收2个变量,而pmap和Map则都可以接收任意多个
x <- list(1, 1, 1)
y <- list(10, 20, 30)
## 以下三者等价
map2(x, y, ~ .x + .y)
pmap(list(x,y),~.x + .y)
Map(function(x,y) x + y, x, y)
# 如果使用mapply,则会尽量将结果转化为向量,相当于强制加了unlist
mapply(function(x,y) x + y, x, y)
相关文章