Metafor报错:无法找到'yi'变量,请求技术排查
排查metafor包中「无法找到'yi'变量」的问题
以下是针对你遇到问题的逐步排查和解决方法:
1. 确认escalc的正确使用方式
escalc函数的返回值是包含yi和vi的数据框,必须将结果赋值给一个对象,否则生成的变量不会保留在全局环境中。示例代码:
library(metafor) # 加载示例数据集 data(dat.bcg, package = "metadat") # 计算logRR和对应方差,赋值给dat对象 dat <- escalc(measure = "RR", ai = tpos, bi = tneg, ci = cpos, di = cneg, data = dat.bcg)
执行完后,用names(dat)或str(dat)检查dat中是否包含yi和vi列——正常情况下肯定会存在这两个变量。
2. 调用rma.uni时必须指定data参数
yi和vi是存储在dat数据框中的列,而非全局环境中的独立变量。调用模型时必须通过data参数告诉函数从哪个数据框读取变量:
res <- rma.uni(yi, vi, data = dat) print(res)
如果省略data=dat,R会在全局环境中查找yi,自然会提示找不到变量。
3. 排查环境冲突问题
- 避免使用
attach(dat):attach虽然能临时让数据框列变成全局变量,但容易引发命名冲突或环境混乱,建议始终通过data参数指定数据源。如果已经用了attach,先执行detach(dat)再重新运行模型。 - 检查包冲突:如果同时加载了其他meta分析包(如
meta),可能会和metafor的函数或变量命名冲突。执行sessionInfo()查看已加载包,冲突时可以用包前缀指定函数,比如metafor::escalc()。
4. 更新或重装相关包
如果上述步骤都无效,可能是包版本兼容问题。尝试更新或重装metafor和metadat:
# 更新包 update.packages(c("metafor", "metadat")) # 若更新无效,重装包 install.packages(c("metafor", "metadat"))
内容的提问来源于stack exchange,提问作者Marrissa Martyn-St James
相关产品推荐
相关产品推荐

