R语言如何编写支持magrittr管道承接前置操作的自定义函数
问题原因
你的自定义函数没有适配dplyr的非标准评估逻辑:你传入的var参数会被默认解析为全局环境中预先生成的TestData原始向量,而非管道传递过来的、经过处理的数据框内的对应列,因此无论前置做了什么数据处理,统计的都是全量原始数据的结果。
修复方案
只需用dplyr提供的**卷曲运算符({{ }})**包裹函数内的var参数,即可让参数正确匹配当前数据框上下文内的列:
# 修改后的自定义函数 custom_summary_cont2 <- function(DAT, var) { DAT %>% summarise( mean = mean({{ var }}), median = median({{ var }}), sd = sd({{ var }}), quant25 = unname(quantile({{ var }}, probs = 0.25)), quant75 = unname(quantile({{ var }}, probs = 0.75)), min = min({{ var }}), max = max({{ var }}) ) }
修改后再运行带filter的管道代码,即可得到筛选后数据的正确统计结果。
相关学习资料推荐
这块属于tidyverse自定义函数的基础内容,推荐阅读《R数据科学(R for Data Science)》,书中专门有章节讲解如何编写适配tidyverse管道、支持非标准评估的自定义函数,逻辑讲解清晰易懂,配套的练习也能帮你快速掌握相关用法。
内容的提问来源于stack exchange,提问作者CostelloatKaro
相关产品推荐
相关产品推荐

