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

自定义函数中搭配dplyr {{}}使用aggregate时出现报错如何解决?

错误诱因
  • {{ }} 是dplyr等tidyverse系列函数专属的整洁求值语法,仅支持适配了tidy eval规则的函数,而aggregate是R基础包的函数,无法识别该语法,会直接把{{level}}当做普通变量名解析,才会抛出变量长度不匹配的报错。
  • 函数外运行正常是因为你直接写了真实的列名作为公式项,不需要求值解析步骤,自然不会触发问题。
  • 额外注意:你把自定义函数命名为filter,而filter是dplyr的核心函数名,重名会导致命名空间冲突,后续使用中也可能引发其他异常。
解决方案

方案1:全用tidyverse语法实现逻辑(更推荐,和你原本用{{ }}的习惯适配)

用dplyr的group_by + summarise + across实现完全等价的按指定列分组求和所有其他列的效果,代码如下:

library(dplyr)

my_aggregate <- function(df, level) {
  df <- df %>%
    group_by({{level}}) %>%
    summarise(across(everything(), sum, na.rm = TRUE))
  return(df)
}
# 调用示例:假设要按class列分组求和
# result <- my_aggregate(your_df, class)

方案2:如果要保留base的aggregate函数,手动构造公式

不需要用{{ }},改用非标准求值手动生成公式即可:

my_aggregate <- function(df, level) {
  # 把传入的level参数转为字符串列名
  level_col <- deparse(substitute(level))
  # 构造公式
  agg_formula <- as.formula(paste0(". ~ ", level_col))
  df <- aggregate(agg_formula, data = df, FUN = sum)
  return(df)
}
# 调用方式和之前一致
# result <- my_aggregate(your_df, class)

内容的提问来源于stack exchange,提问作者keenan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:36:03