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

rstatix::dunn_test传入动态变量名构建公式报错如何解决?

问题原因

rstatix包的函数内部基于tidyverse的非标准评估机制实现,不会像基础R统计函数那样自动解析公式内部的eval(parse())调用,而是直接将表达式文本当作列名去数据框中检索,因此触发列不存在的报错。你之前用到的wilcox.test和coin::wilcox_test采用基础R的标准公式解析流程,会先执行公式内的eval语句再提取变量,所以相同写法可以正常运行。

可行解决方案

以下几种方法都可以解决动态传入变量名的问题:

方法1:用基础R的reformulate构造公式(最稳妥,无需依赖其他包)

reformulate是R原生的公式构造函数,专门用来处理动态变量名的场景:

selectedcolnames <- "SF36"
group_name <- "therapy"
# 构造公式对象
fml <- reformulate(response = selectedcolnames, termlabels = group_name)
# 传入dunn_test
dunn_test(fml, data = data, p.adjust.method = "holm", detailed = F)

方法2:拼接公式字符串后转换为公式对象

如果习惯用glue来拼接变量,可以先拼出完整的公式字符串再转成公式:

library(glue)
selectedcolnames <- "SF36"
group_name <- "therapy"
fml <- as.formula(glue("{selectedcolnames} ~ {group_name}"))
dunn_test(fml, data = data, p.adjust.method = "holm", detailed = F)

方法3:tidyverse风格的.data代词写法

适配tidyverse非标准评估逻辑,直接用字符串提取数据框列:

library(rstatix)
selectedcolnames <- "SF36"
group_name <- "therapy"
dunn_test(data, .data[[selectedcolnames]] ~ .data[[group_name]], 
          p.adjust.method = "holm", detailed = F)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:48:02