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

如何让modelsummary的datasummary_correlation兼容自定义corstars函数?

解决modelsummary::datasummary_correlation与自定义corstars函数兼容问题

问题出在datasummary_correlation()要求传入的method函数必须返回带匹配行/列名的方阵(矩阵或数据框),且行/列名要与输入数据的列名完全一致。很多自定义corstars函数虽然能生成带星号的结果,但可能在结构或行/列名设置上不符合要求。

修改后的兼容版corstars函数

以下是调整后的函数,确保满足datasummary_correlation的要求:

corstars <- function(data, ...) {
  # 检查并加载Hmisc包
  if (!requireNamespace("Hmisc", quietly = TRUE)) {
    stop("请先安装Hmisc包:install.packages('Hmisc')")
  }
  
  # 计算相关系数和p值矩阵
  corr_results <- Hmisc::rcorr(as.matrix(data))
  corr_mat <- corr_results$r
  p_mat <- corr_results$P
  
  # 生成显著性星号矩阵
  stars_mat <- matrix("", nrow = nrow(corr_mat), ncol = ncol(corr_mat))
  stars_mat[p_mat < 0.001] <- "***"
  stars_mat[p_mat < 0.01 & p_mat >= 0.001] <- "**"
  stars_mat[p_mat < 0.05 & p_mat >= 0.01] <- "*"
  
  # 合并系数与星号,保留两位小数
  corr_with_stars <- paste0(round(corr_mat, 2), stars_mat)
  
  # 设置对角线为"1"(可选,根据需求调整)
  diag(corr_with_stars) <- "1"
  
  # 强制行/列名与输入数据列名一致
  rownames(corr_with_stars) <- colnames(data)
  colnames(corr_with_stars) <- colnames(data)
  
  # 返回矩阵(矩阵格式更适配datasummary_correlation)
  return(corr_with_stars)
}

调用方法

直接传入修改后的函数即可生成带星号的相关表:

library(modelsummary)
datasummary_correlation(mtcars, method = corstars)

关键调整点

  • 新增...参数:兼容datasummary_correlation自动传递的额外参数(如use)
  • 强制行/列名匹配:确保返回矩阵的行/列名与输入数据的列名完全一致,避免结构不匹配
  • 明确返回矩阵格式:保证输出是标准方阵结构,符合datasummary_correlation的校验要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:20:13