用途
本技能用于在编写 tidyverse R 代码时提供现代最佳实践,目标环境为 dplyr 1.1+ 与 R 4.3+。核心原则包括:优先使用现代 tidyverse 模式(dplyr 1.1+ 特性、原生管道、当前 API);优化前先做性能剖析(profvis、bench);先写可读代码,仅在必要时且剖析之后再优化;遵循 tidyverse 风格指南,保持命名、空格与结构一致。
主要能力
管道
始终使用原生管道 |> 而非 magrittr 的 %>%,R 4.3+ 已提供所需全部特性。
连接语法与质量控制
使用 join_by() 替代字符向量,支持不等值连接、滚动连接与重叠连接。可用 relationship 声明基数以校验连接假设,unmatched = "error" 捕获意外未匹配,na_matches = "never" 防止 NA 静默匹配,交互时可用 tidylog:: 前缀验证连接结果。
数据掩码与 tidy 选择
区分数据掩码函数(arrange、filter、mutate、summarise)与 tidy 选择函数(select、relocate、across)。函数参数用 {{}}(embrace),字符向量用 .data[[]],多列用 across()。
分组与列操作
使用 .by 做按操作分组(始终返回未分组结果),pick() 在数据掩码函数内选择列,across() 对多列应用函数,reframe() 生成多行摘要。
NA 安全过滤
用 filter_out() 替代条件取反,因为取反会静默丢弃 NA;多列 OR/AND 过滤可用 when_any() 与 when_all()(dplyr 1.2+)。
重编码与条件更新
用 replace_when() 做原地条件更新,避免 case_when() 配合 .default = x 的重复;当所有情况都应被处理时,用 case_when() 配合 .unmatched = "error"。
序列化
使用 qs2 进行快速序列化(qs 的后继,不向后兼容),文件扩展名为 .qs2。
purrr 现代模式
用 map() |> list_rbind() 替代已被取代的 map_dfr(),用 list_cbind() 替代 map_dfc();用 walk() 处理副作用(写文件、绘图);用 in_parallel() 跨核心扩展。
stringr 字符串处理
优先使用 stringr 而非 base R 字符串函数,具有一致的 str_ 前缀与字符串优先的参数顺序,天然适配管道且向量化。涵盖检测、提取、替换、拆分、长度、截取、拼接、模板、填充、换行、大小写转换,以及 fixed()、regex()、coll() 等模式辅助函数。
向量化与性能
使用向量化操作与类型稳定的 purrr 函数(map_dbl、map_chr),避免类型不稳定的 sapply() 与简单操作中的显式循环。
使用方式
本技能以模式对照与代码示例的形式给出,包含“推荐写法”与“应避免写法”的并列示例,可直接在编写 tidyverse R 代码时参照。文档还提供从 base R 到现代 tidyverse、从旧版 tidyverse 到新版模式的迁移对照表,例如 subset() → filter()、aggregate() → summarise(..., .by =)、gather()/spread() → pivot_longer()/pivot_wider()、separate() → separate_wider_delim()、extract() → separate_wider_regex(),以及被取代的 purrr 函数映射。
适用场景
适用于编写或重构 tidyverse R 代码、进行数据连接与校验、分组汇总、多列批量操作、字符串清洗、函数式迭代与并行处理,以及从 base R 或旧版 tidyverse 迁移到现代模式的场景。
限制
资料未提供该技能的安装命令、运行环境依赖、许可与收费信息,暂未提供。部分特性有版本要求(如 dplyr 1.1+、dplyr 1.2+、purrr 1.0+、purrr 1.1.0+、R 4.3+),使用前需确认版本。qs2 与 qs 不向后兼容。