如何将meta包forest()绘制的森林图小数点改为中线小数点?
解决meta包forest()森林图替换中线小数点的方法
由于meta包的forest()函数没有内置参数直接设置小数点样式,我们可以通过以下两种方式实现普通小数点到中线小数点(·)的替换:
方法1:自定义效应量文本(推荐)
手动生成带中线小数点的效应量与置信区间文本,传递给forest()的对应参数替换默认输出,无需修改函数本身,安全性更高。
代码示例
library(meta) # 加载示例数据并执行meta分析 data(Olkin95) ma_result <- metacor(yi, vi, data = Olkin95, method = "DL") # 生成单个研究的效应量文本(替换小数点) study_effects <- mapply(function(te, lower, upper) { # 先格式化常规字符串 raw_txt <- sprintf("%.2f (%.2f, %.2f)", te, lower, upper) # 替换普通小数点为中线小数点 gsub("\\.", "·", raw_txt) }, ma_result$TE.random, ma_result$lower.random, ma_result$upper.random) # 生成汇总效应量文本(替换小数点) summary_effect <- sprintf("%.2f (%.2f, %.2f)", ma_result$TE, ma_result$lower, ma_result$upper) summary_effect <- gsub("\\.", "·", summary_effect) # 绘制森林图,使用自定义文本 forest(ma_result, text.random = study_effects, # 替换单个研究的效应量文本 text.es = summary_effect, # 替换汇总行的效应量文本 text.fixed = summary_effect) # 若使用固定效应模型,替换对应行文本
方法2:临时修改forest.meta函数的输出逻辑
如果需要批量处理且不想每次手动生成文本,可以临时修改forest.meta函数的代码逻辑,让它自动替换小数点:
# 调用trace函数编辑forest.meta的源代码 trace(forest.meta, edit = TRUE)
在弹出的编辑器中,找到所有生成效应量文本的代码段(通常包含sprintf语句),在生成文本后添加一行替换代码:
txt <- gsub("\\.", "·", txt)
保存后,后续调用forest()时,所有效应量文本的小数点都会自动替换为中线样式。注意:这种修改是临时的,重启R后会失效。
内容的提问来源于stack exchange,提问作者Christine
相关产品推荐
相关产品推荐

