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

