如何将混用新旧管道的R代码改为完全适配新管道(|>)?
全用R新管道(|>)的改写方案
首先纠正原代码的笔误:你写的%>应该是%>%,否则原混用管道的代码也无法正常运行。
要改成完全使用新管道|>,核心问题是新管道只能自动将左侧结果作为右侧函数的第一个参数传递,无法像%>%那样用.在任意位置指代左侧对象。针对你的代码逻辑,有以下可行方案:
方案1:使用匿名函数捕获左侧对象
这是最直接的改写方式,利用R 4.1及以上版本支持的匿名函数语法\(x)来捕获拆分后的列表,同时作为set_names的目标对象和生成名字的数据源:
df |> group_split(group_lab) |> (\(split_list) set_names(split_list, map_chr(split_list, ~ .x$group_lab[1])))()
方案2:拆分逻辑分步实现
如果你觉得匿名函数不够直观,也可以拆分步骤,先生成拆分后的列表,再单独生成名字向量并赋值:
split_df <- df |> group_split(group_lab) split_df |> set_names(map_chr(split_df, ~ .x$group_lab[1]))
关于“代码可直接适配新管道”的说明
这种说法并不准确。原混用管道的代码中,%>%会自动将左侧拆分后的列表作为set_names的第一个参数,同时允许用.在map_chr里再次引用该列表;但直接把%>%换成|>后,map_chr(., ...)里的.会变成未定义变量,导致代码报错,必须通过匿名函数或分步赋值的方式处理。
内容的提问来源于stack exchange,提问作者Francisco Cardozo
相关产品推荐
相关产品推荐

