如何在R的modelsummary包中恢复添加p值后的相关表默认下三角格式
问题:为相关表添加p值并保留默认下三角显示格式
之前的解决方案通过自定义method函数实现了给相关表添加p值(以星号标注),但生成的是完整的矩形相关表,而默认调用datasummary_correlation(dat)时会生成仅显示下三角的格式。尝试使用datasummary_correlation_format()恢复默认格式未成功,现寻求正确实现方法。
之前的解决方案代码(生成完整矩形表)
library(modelsummary) library(correlation) dat = mtcars[1:5, 1:5] fun = function(x) { out = correlation(x) stars = c("*" = .2, "**" = .15, "***" = .05) p = modelsummary:::make_stars(out$p, stars) out$r = sprintf("%.2f%s", out$r, p) out = as.matrix(out) return(out) } datasummary_correlation(dat, method = fun)
尝试失败的代码
library(modelsummary) library(correlation) dat = mtcars[1:5, 1:5] fun = function(x) { out = correlation(x) datasummary_correlation_format( out, fmt = 2, upper_triangle = ".", diagonal = "1") stars = c("*" = .2, "**" = .15, "***" = .05) p = modelsummary:::make_stars(out$p, stars) out$r = sprintf("%.2f%s", out$r, p) out = as.matrix(out) return(out) } datasummary_correlation(dat, method = fun)
正确实现代码
关键是先完成p值与相关系数的合并,再将处理后的矩阵传入datasummary_correlation_format()进行格式调整,确保格式化后的结果被返回:
library(modelsummary) library(correlation) dat = mtcars[1:5, 1:5] fun = function(x) { # 计算相关系数与p值 out = correlation(x) # 为p值添加星号标注,并合并到相关系数中 stars = c("*" = .2, "**" = .15, "***" = .05) p_stars = modelsummary:::make_stars(out$p, stars) out$r = sprintf("%.2f%s", out$r, p_stars) # 转换为矩阵后应用下三角格式 out_mat = as.matrix(out) formatted_out = datasummary_correlation_format( out_mat, upper_triangle = ".", # 上三角用点填充 diagonal = "1" # 对角线显示1 ) return(formatted_out) } # 生成带p值星号的下三角相关表 datasummary_correlation(dat, method = fun)
说明
- 先完成相关系数与p值星号的合并,确保每个单元格内容是带星号的相关系数字符串
- 将合并后的结果转为矩阵,再通过
datasummary_correlation_format()设置上三角填充符和对角线内容,实现默认的下三角显示效果 - 注意必须将
datasummary_correlation_format()的返回值赋值给变量并最终返回,否则格式化操作不会生效
内容的提问来源于stack exchange,提问作者David G
相关产品推荐
相关产品推荐

