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

R语言函数报错:按菌种计算药敏率时对象未找到问题排查

解决方案

方案1:使用tidy eval(.enquo() + !!)

将参数转为引用对象,再在summarise中解引用,同时简化敏感率计算逻辑(mean()等价于sum()/n()):

calculate_by_spec <- function(dat, po) {
  # 将参数转为引用
  po_col <- .enquo(po)
  x1 <- dat %>% 
    group_by(organism_name) %>% 
    # 解引用并计算敏感率,.groups="drop"清除分组状态
    summarise(susceptibility = mean((!!po_col) == "S"), .groups = "drop")
  
  print(x1)
}

# 调用(直接传裸列名)
calculate_by_spec(demo_dat, amox_clav_po)

方案2:通过字符串传递列名

如果习惯用字符串指定列名,使用.data代词访问数据框列:

calculate_by_spec <- function(dat, po) {
  x1 <- dat %>% 
    group_by(organism_name) %>% 
    summarise(susceptibility = mean(.data[[po]] == "S"), .groups = "drop")
  
  print(x1)
}

# 调用(列名需加引号)
calculate_by_spec(demo_dat, "amox_clav_po")

方案3:用janitor::tabyl实现(符合最初思路)

如果想用tabyl,可以直接按分组统计各类敏感性占比,再计算敏感率:

calculate_by_spec <- function(dat, po) {
  po_col <- .enquo(po)
  dat %>% 
    # 按菌种和敏感性分组统计
    tabyl(organism_name, !!po_col) %>% 
    # 计算敏感率
    mutate(susceptibility = S / (S + I + R)) %>% 
    # 保留需要的列
    select(organism_name, susceptibility)
}

calculate_by_spec(demo_dat, amox_clav_po)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 08:57:35