【问题标题】:Can I tell R to create an object in case that that object does not exist yet?如果该对象尚不存在,我可以告诉 R 创建一个对象吗?
【发布时间】:2019-09-11 07:43:01
【问题描述】:

我正在使用 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
  • 我将进行 90 次分析,不包括额外的主持人测试。而且我将手动执行所有这些操作,因为我不是经验丰富的编码员,并且以前从未使用过循环。

标签: r replace na missing-data metafor


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多