绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
purrr包map系列函数的基本包写法:lapply/Map/mapply
2020-06-27 19:21:11

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(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)

其中,“~.x + .y”实质上就是“function(x,y) x + y”。其实就是一个写法不同,对于R用户其实并没有多少便捷,反而多加了一种规范强制让用户去记忆。我相信,懂得“~.x + .y”还是需要去懂得“function(x,y) x + y”,但是懂得“function(x,y) x + y”却没必要去理解“~.x + .y”,事实上purrr也完全支持“function(x,y) x + y”。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

R语言
创建时间:2020-06-15 11:46:51
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的工具。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 小雨滴
    专家
戳我,来吐槽~