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

metafor包addpoly()函数annosym参数无效报错解决方案咨询

问题原因

annosym 是仅属于 forest() 函数的专属参数,addpoly() 本身没有这个参数定义,你传入的参数会被当做无效的图形参数处理,因此触发警告,也无法生效。

可行解决方法

方法1:临时修改metafor全局默认标注格式

直接修改metafor包内部存储的默认annosym参数,后续所有绘图相关的调用都会自动沿用这个配置,不需要单独给每个函数传参:

# 先保存原来的默认配置,用完可以改回去避免影响后续绘图
old_annosym <- metafor:::.mfpar$annosym
# 改成你需要的格式
metafor:::.mfpar$annosym <- c(' (','; ',')')

# 跑原来的绘图代码,addpoly不需要再传annosym参数
res <- rma(ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg, measure = 'OR', method='DL',
           slab=paste(author, year))
forest(res, ylim=c(-2,16))

dat.bcg.rand <- dat.bcg[dat.bcg$alloc=='random',]
res.rand <- rma.uni(ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg.rand, measure = 'OR', method='DL', 
                    slab=paste(author, year))
addpoly(res.rand, mlab='Random alloc.',atransf=exp)

# 绘图完成后可以改回默认配置
metafor:::.mfpar$annosym <- old_annosym

方法2:手动拼接标注文本(自定义程度更高)

如果你不想修改全局配置,可以关闭addpoly的默认标注,自己计算效应值和置信区间后手动拼接格式,用text()函数添加到对应位置:

# 先绘制主森林图
res <- rma(ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg, measure = 'OR', method='DL',
           slab=paste(author, year))
forest(res, annosym=c(' (','; ',')'), ylim=c(-2,16))

# 拟合亚组模型
dat.bcg.rand <- dat.bcg[dat.bcg$alloc=='random',]
res.rand <- rma.uni(ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg.rand, measure = 'OR', method='DL', 
                    slab=paste(author, year))

# 添加亚组多边形,不显示默认的效应值标注
addpoly(res.rand, mlab='Random alloc.', atransf=exp, showweights=FALSE, efac=NA)
# 手动计算转换后的效应值和置信区间
or <- exp(res.rand$beta)
ci_lb <- exp(res.rand$ci.lb)
ci_ub <- exp(res.rand$ci.ub)
# 拼接成你要的格式,保留两位小数可自行调整精度
anno_text <- paste0(sprintf("%.2f", or), " (", sprintf("%.2f", ci_lb), "; ", sprintf("%.2f", ci_ub), ")")
# 加到对应位置,y坐标根据你forest的ylim调整,这里亚组默认在最下方y=-1的位置(可根据实际调整)
text(x = max(ci_ub)*1.1, y = -1, labels = anno_text, pos=4)

内容的提问来源于stack exchange,提问作者Łukasz Deryło

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:24:04