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

如何增加dunn.test函数输出的p值小数位数

解决dunn.test函数输出p值小数位数不足的问题

我明白你遇到的困扰——dunn.test函数默认只显示4位小数,导致极小的p值直接显示为0.0000,而且全局的options(digits = 10)设置对它的输出完全不起作用。这是因为dunn.test包的打印方法是硬编码了小数位数,完全忽略了全局的digits配置。下面给你两种实用的解决方案:

方法一:提取原始p值并手动格式化

dunn.test的返回结果对象中存储了未格式化的原始p值,你可以直接提取出来,用自己想要的格式展示:

  • 先将检验结果保存到变量中:
# 运行Dunn检验并保存结果
dt_result <- dunn.test::dunn.test(
  my_data$value, 
  my_data$name, 
  method = "bonferroni"
)
  • 提取并格式化p值:
    你可以选择查看未调整的原始p值(dt_result$p.values)或者经过Bonferroni调整后的p值(dt_result$p.adjusted),用sprintf或format函数自定义小数位数:
# 格式化调整后的p值,保留10位小数
sprintf("%.10f", dt_result$p.adjusted)

# 或者用format函数,强制避免科学计数法
format(dt_result$p.adjusted, digits = 10, scientific = FALSE)

这样就能看到极小p值的精确数值,比如原本显示0.0000的p值可能会显示为0.0000012345。

方法二:自定义print方法让输出直接显示更多小数

如果你希望dunn.test的默认输出就显示更多小数,可以重写它的打印方法。运行下面的代码后,再调用dunn.test就会按照你设置的位数显示p值:

  • 定义新的打印方法:
# 重写dunn.test的打印方法,支持自定义小数位数
print.dunn.test <- function(x, digits = 10, ...) {
  cat("Dunn's test of multiple comparisons using rank sums\n\n")
  cat("  Comparison of x by group\n")
  cat(paste0("  (", x$method, ")\n\n"))
  cat("Mean rank differences:\n")
  print(x$Z, digits = digits)
  cat("\nAdjusted p-values:\n")
  print(x$p.adjusted, digits = digits)
  cat("\n")
}
  • 再次运行检验:
    现在直接调用dunn.test函数,输出的p值就会显示10位小数了。你也可以修改digits参数来调整显示的位数(比如改成digits = 8)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:48:18