purrr包map系列函数的基本包写法:lapply/Map/mapply

2020-06-27 00:00:00 数据 函数 专区 放在 强制

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

相关文章