如何设置让dplyr管道%>%默认不自动将.作为第一个参数
修改dplyr %>%管道的默认行为:禁用自动传递左侧参数
要让%>%默认不再自动把左侧表达式作为右侧函数的第一个参数,而是要求你显式用.引用左侧值,你可以直接重新定义这个运算符——因为dplyr里的%>%实际继承自magrittr包,我们可以覆盖它的默认逻辑。
实现代码
library(magrittr) # 重新定义%>%,强制要求显式用.引用左侧输入 `%>%` <- function(lhs, rhs) { rhs_expr <- substitute(rhs) # 直接执行右侧表达式,仅把.绑定为左侧值,不自动插入到函数第一个参数 eval(rhs_expr, envir = list(. = lhs), enclos = parent.frame()) }
测试验证
# 不显式传.会报错,符合预期 1:10 %>% mean(na.rm = TRUE) # 报错:Error in mean(na.rm = TRUE) : argument "x" is missing, with no default # 显式传入.才能正常运行 1:10 %>% mean(., na.rm = TRUE) # 输出:[1] 5.5 # 复杂dplyr操作也需要显式用. mtcars %>% filter(.$cyl == 6) %>% select(.$mpg, .$wt)
注意事项
- 这个修改是全局生效的,当前R会话里所有使用
%>%的地方都会遵循这个新规则 - 如果需要恢复原生
%>%的自动传参行为,只需重新加载magrittr或dplyr:library(magrittr, reload = TRUE) # 或者 library(dplyr, reload = TRUE) - 重新定义运算符可能会和依赖原生
%>%行为的第三方代码冲突,确保你的代码全程都是显式用.引用左侧值后再使用这个修改
内容的提问来源于stack exchange,提问作者LulY
相关产品推荐
相关产品推荐

