相关性元分析绘制森林图遇xlim报错的解决求助
相关性元分析森林图绘制报错解决
我是R语言初学者,正在进行相关性元分析,学习自YouTube教程。运行以下代码绘制森林图时出现报错:
install.packages("metafor") install.packages("robumeta") install.packages("dplyr") library(metafor) library(robumeta) library(dplyr) Main<- read.csv("Meta-main.csv") Main <- mutate(Main, study_id = 1:23) Main <- Main %>% select(study_id, Authur:Quality) View(Main) Main <-escalc(measure = "ZCOR", ri=EffSize, ni=Ssize, data = Main, slab = paste(Authur, Year, sep = ", ")) View(Main) res <- rma(yi, vi, data = Main) res predict(res, digits = 3, transf = transf.ztor) confint(res) b_res <- rma(yi, vi, data = Main, slab = study_id) baujat(b_res) inf<-influence(res) print(inf) plot(inf) forest(res, xlim=c(-1.6,1.6), atransf = transf.ztor, at = transf.rtoz(c(-4,-2,0,.2,.4,.6)), digits = c(2,1),cex = .8)
报错信息:
Error in plot.window(...) : need finite 'xlim' values
我尝试用x<-1.6:1.6解决但无效,恳请提供帮助。
问题根源
这个错误是因为你在forest()函数的at参数中使用了超出皮尔逊相关系数r合法范围的数值。r的取值范围是**[-1, 1]**,你输入的-4和-2完全超出了这个区间,transf.rtoz()函数处理这些非法值时会返回NaN(非数值),导致绘图函数无法生成有效的坐标轴范围,最终触发报错。你可以自己运行transf.rtoz(c(-4,-2,0,.2,.4,.6))验证,前两个结果肯定是NaN。
解决步骤
- 修正坐标轴刻度参数:将
at中的r值替换为[-1,1]范围内的合法值,比如调整为c(-1, -0.5, 0, 0.2, 0.4, 0.6) - 匹配合理的xlim范围:要么去掉
xlim让函数自动计算合适的范围,要么根据修正后的刻度设置对应的区间,比如xlim=c(-1.2, 1.2) - 修改后的森林图代码:
# 方案1:让函数自动计算xlim forest(res, atransf = transf.ztor, at = transf.rtoz(c(-1, -0.5, 0, 0.2, 0.4, 0.6)), digits = c(2,1), cex = .8) # 方案2:手动设置合适的xlim forest(res, xlim=c(-1.2, 1.2), atransf = transf.ztor, at = transf.rtoz(c(-1, -0.5, 0, 0.2, 0.4, 0.6)), digits = c(2,1), cex = .8)
额外检查点
- 确认你的效应值转换流程正确:
escalc(measure="ZCOR")已经将原始相关系数r转换为Fisher's z值用于元分析,atransf=transf.ztor是将坐标轴重新转换回r尺度,所以at必须使用r的合法取值。
内容的提问来源于stack exchange,提问作者אלין קצ'וקי
相关产品推荐
相关产品推荐

