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

自定义tidyverse函数中dplyr::summarise()报错排查求助

问题解决:批量生成兽医站点统计表格的报错修复

错误原因

调用函数时用vars()包裹变量参数,但dplyr的{{}}(curly curly)语法期望接收裸变量名或单个quosure,vars()返回的是quosure列表,导致ifelse无法识别参数类型,触发报错。

修复步骤

1. 修改函数调用方式

去掉vars()包裹,直接传入裸变量名:

# 修正后的调用
df.vetsite1.2021 %>% make_vet_site_table_row(var1 = var1_final_denom, var2 = var2_for_cnt)
df.vetsite2.2021 %>% make_vet_site_table_row(var1 = var1_beginning_denom, var2 = var2_for_cnt)

2. 优化函数内部逻辑(可选,更简洁健壮)

替换基础ifelse为dplyr::if_else(类型检查更严格),也可以用逻辑值乘法简化计算:

make_vet_site_table_row <- function(df, var1, var2) {
  df %>% 
    dplyr::summarise(
      "Total number of vets"                     = n(),
      "Number of customers with at least 11 dogs" = sum(dplyr::if_else({{var1}} >= 11, {{var2}}, 0)),
      "Number of customers with at least 20 dogs" = sum(dplyr::if_else({{var1}} >= 20, {{var2}}, 0)),
      "Total number of dogs"                       = sum({{var1}}),
      "Mean number of patients (by vet)"         = round(mean({{var1}}), digits = 2),
      "Range of the number of patients (by vet)" = max({{var1}}) - min({{var1}}),
      "Smallest and largest number of dogs (by vet)" = paste0(min({{var1}}), ", ", max({{var1}}))
    )
}

3. 验证结果

用示例数据集测试:

# 构造示例数据集
df.vetqm <- tibble::tibble(
  site = c("site1", "site2", "site2", "site2", "site3", "site3"),
  var1_final_denom = c(3, 66, 23, 45, 542, 68),
  var2_for_cnt = c(3, 65, 45, 48, 423, 63),
  year = rep("2021", 6)
)

# 分组预处理
df.vetsite.2021 <- df.vetqm %>% filter(year=="2021" & var1_final_denom>0) %>% group_by(site)

# 调用生成表格
df.vetsite.2021 %>% make_vet_site_table_row(var1 = var1_final_denom, var2 = var2_for_cnt)

输出结果会自动保留site分组列,符合期望格式:

siteTotal number of vetsNumber of customers with at least 11 dogsNumber of customers with at least 20 dogsTotal number of dogsMean number of patients (by vet)Range of the number of patients (by vet)Smallest and largest number of dogs (by vet)
site110033.0003, 3
site2315815813444.674323, 66
site32486486610305.0047468, 542

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:50:14