测试参数为列名的dplyr函数片段:如何临时存储列名参数?
如何临时存储dplyr函数中的列名参数用于测试
你遇到的问题是因为直接赋值grouped_var <- b时,R会尝试在全局环境中查找名为b的对象,但b只是tibble中的列名,并非独立存在的对象。以下是几种基于dplyr/rlang的解决方案,帮你临时存储这类列名参数并测试函数片段:
方法1:用符号(Symbol)存储,结合!!解析
先用sym()将列名字符串转换为符号对象,再用!!(bang-bang)在dplyr调用中解析该符号:
data <- data_table grouped_var <- sym("b") data %>% group_by(!!grouped_var) %>% mutate(mean_a = mean(a))
方法2:用enquo()捕获列名表达式,结合{{}}解析
enquo()可以捕获裸列名的表达式(和你函数中{{grouped_var}}的底层逻辑一致),之后直接用{{}}解析即可:
data <- data_table grouped_var <- enquo(b) data %>% group_by({{grouped_var}}) %>% mutate(mean_a = mean(a))
方法3:用字符串存储,结合.data代词
dplyr推荐使用.data代词来引用字符串形式的列名,这种方式更直观且避免环境混淆:
data <- data_table grouped_var <- "b" data %>% group_by(.data[[grouped_var]]) %>% mutate(mean_a = mean(a))
以上三种方法都能完美适配你原函数中使用的{{}}(curly-curly)语法,让你可以单独测试函数内的代码片段,而不需要完整调用函数。
内容的提问来源于stack exchange,提问作者C. Sebastian
相关产品推荐
相关产品推荐

