在R语言自定义函数中使用group_by和count未获预期结果
自定义count函数的适配修正
你的问题出在参数传递和准引用的不匹配:函数里用的{{}}(准引用语法)是用来直接处理裸变量名的,但你调用时传的是字符串形式的变量名,导致无法正确解析列名。
以下两种方案可以解决问题:
方案1:支持字符串参数调用
用.data代词来引用字符串对应的列,无需额外依赖:
count_func <- function(groupvar, outcome){ mtcars %>% group_by(.data[[groupvar]]) %>% count(.data[[groupvar]], .data[[outcome]]) } # 调用方式不变 count_func("vs", "am")
或者用rlang包的符号转换处理:
library(rlang) count_func <- function(groupvar, outcome){ # 将字符串转为符号 group_sym <- sym(groupvar) outcome_sym <- sym(outcome) mtcars %>% group_by(!!group_sym) %>% count(!!group_sym, !!outcome_sym) } count_func("vs", "am")
方案2:支持裸变量名调用
保持原函数的{{}}语法,调用时直接传入裸变量名即可:
# 原函数不变 count_func <- function(groupvar, outcome){ mtcars %>% group_by({{groupvar}}) %>% count({{groupvar}}, {{outcome}}) } # 调用时传裸变量名 count_func(vs, am)
两种方案的输出结果都和mtcars %>% group_by(vs) %>% count(vs, am)完全一致。
内容的提问来源于stack exchange,提问作者Moses
相关产品推荐
相关产品推荐

