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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:52:16