🔃purrr 包学习笔记

type
status
date
slug
summary
tags
category
icon
password
comment
在 R 语言里,循环与函数式编程一直是高频场景。base R 的 apply 家族虽然功能强大,但语法繁杂,返回值类型也不总是可控。purrr 包(tidyverse 一员)则提供了一套简洁、可预测、函数式风格的工具,极大提升了代码的可读性与稳定性。
这篇笔记梳理了 purrr 的核心功能,方便快速上手。

1. map 系列函数

map() 是 purrr 的核心:对输入向量或列表的每个元素应用函数,结果返回为 list
为了避免结果类型不确定,purrr 还提供了强类型版本:
  • map_lgl():返回 logical 向量
  • map_int():返回 integer 向量
  • map_dbl():返回 double 数值向量
  • map_chr():返回 character 向量
对比 base R:
  • lapply()map()
  • sapply()map_*() (但 sapply 返回类型可能不稳定)

2. 匿名函数写法

purrr 支持公式风格的匿名函数,更简洁:
等价于:

3. map2 与 pmap:多输入并行映射

  • map2(x, y, f):两个输入并行映射
  • pmap(list(...), f):多个输入并行映射

4. reduce 与 accumulate:归约操作

  • reduce(x, f):逐步合并向量
  • accumulate(x, f):记录每一步合并结果

5. safely / possibly / quietly:安全调用

在数据处理中,函数报错往往会打断流程。purrr 提供了优雅的错误处理方式:
如果只想要结果,出错时返回默认值:

6. transpose:列表转置

transpose() 可以交换 list 的结构,常用于整理嵌套列表:

7. purrr vs apply 家族对照表

base R
purrr
返回结果
lapply(x, f)
map(x, f)
list
sapply(x, f)
map_*()
确定类型向量
mapply(f, x, y)
map2(x, y, f)
list/向量
Reduce(f, x)
reduce(x, f)
单值
Filter(f, x)
keep(x, f)
list
Map(f, ...)
pmap(list(...), f)
list

总结

  • map() 家族是核心,优雅替代 apply 系列
  • map2 / pmap 处理多输入
  • reduce / accumulate 做归约运算
  • safely / possibly 保证健壮性
  • transpose 整理复杂 list
掌握了这些工具,R 代码不仅更简洁,而且更不容易出错。purrr = apply 家族的 tidyverse 进阶版
Prev
鸽派、鹰派、左派、右派
Next
apply 家族核心函数
Loading...
Article List
Evan の Logbook
✨ Updates
🎨 Style Guide
🧠 Creative Resources
🗒️ Mind Notes
🧭 Knowbase
📘 SOPs
🩺 Medical Research
🛠️ Tech Chronicles
💰 Fortune Blueprint
📈 R Visionary
📊 Statistics
🖼️ BioVis