You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:52:12