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
相关产品推荐
相关产品推荐

