如果该对象尚不存在,我可以告诉 R 创建一个对象吗?

Can I tell R to create an object in case that that object does not exist yet?

我正在 运行 使用 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 (不存在)。这可能吗?

您可以使用 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