Evan の Logbook
✨ Updates
🎨 Style Guide
🧠 Creative Resources
🗒️ Mind Notes
🧭 Knowbase
📘 SOPs
🩺 Medical Research
🛠️ Tech Chronicles
💰 Fortune Blueprint
📈 R Visionary
📊 Statistics
🖼️ BioVis
🔃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...
YouTube 使用笔记