0

我正在使用 metafor 进行大量元分析。为了大致了解结果,我想将包含主要估计值的向量放在一起(稍后将它们组合到数据框中)。然而,对于其中一些计算,我还没有足够的初步研究,因此 R 将无法为这个特定领域创建模型。因此,当我尝试在最后创建一个向量时,我会收到一条错误消息。

library(metafor)
r1<-c(NA,NA)
n1<-c(NA,NA)
data1<-data.frame(r1,n1)
escalc1<-escalc(measure="COR", ri=r1,ni=n1, data = data1, method=REML)
rma1<-rma(yi,vi, data=escalc1)
#note the program will not be able to calculate rma1, because k = 0.

r2<-c(.3,.2)
n2<-c(100,200)
data2<-data.frame(r2,n2)
escalc2<-escalc(measure="COR", ri=r2,ni=n2, data = data2, method=REML)
rma2<-rma(yi,vi, data=escalc2)
#it will create an object for rma2 though

estimates<-c(rma1$beta, rma2$beta)
#as rma2 exists but rma1 doesn't, R will no let me create a vector here

有没有办法告诉 R 先检查对象是否存在,并在所有尚未创建对象的情况下放入 NA?具体来说,我希望 R 在最后一行代码中用 NA 替换 rma1$beta (不存在)。那可能吗?

4

1 回答 1

1

tryCatch如果发生错误,您可以使用来告诉 R 作为替代方法,例如,

library(metafor)
r1<-c(NA,NA)
n1<-c(NA,NA)
data1<-data.frame(r1,n1)
escalc1<-escalc(measure="COR", ri=r1,ni=n1, data = data1)
e1 <- tryCatch({
  rma1<-rma(yi,vi, data=escalc1); 
  rma1$beta}, error = function(e) NA)


r2<-c(.3,.2)
n2<-c(100,200)
data2<-data.frame(r2,n2)
escalc2<-escalc(measure="COR", ri=r2,ni=n2, data = data2)
e2 <- tryCatch({
  rma2<-rma(yi,vi, data=escalc2); 
  rma2$beta}, error = function(e) NA)

estimates<-c(e1, e2)
#[1]        NA 0.2356358
于 2019-09-11T08:02:32.640 回答