【问题标题】:If a function gives error try that iteration again (R)如果函数给出错误再次尝试该迭代(R)
【发布时间】:2021-10-14 04:55:36
【问题描述】:

StackOverflow 上有类似的问题,但是,我找不到与我的问题相同(或远程相似)的解决方案。我在 R

中运行如下模拟
 iterSim <- 1000

 for(i in 1:iterSim){


 #Generate some random data
    Z <- NormalDGP(n=T, beta=coef_min, theta=Theta, rho=Rho, ...)

    y <- Z[1:(length(Z[,1])-1),1]
    x <- Z[2:length(Z[,1]),2]

 #Conduct the following tests! However, Dec_POS_Dep sometimes gives an error

    Dec_POS_Dep <- POS_Dep(y, x, simul=TRUE, trueBeta=coef_min, ...)
    Dec_POS_Fix <- POS_Fix(y, x, simul=TRUE, trueBeta=coef_min, ...)
    Dec_CD_95 <- CD_95(y, x, simul=TRUE)

 }

每次迭代 i 生成随机数并运行三个测试 - 即 Dec_POS_Dep、Dec_POS_Fix 和 Dec_CD_95。不幸的是,有时在模拟中 Dec_POS_Dep 给出错误并且模拟终止。如果给出错误,我不是在寻找循环跳过迭代(根据 StackOverflow 上的许多建议);但是,我希望重复该迭代。例如。如果代码在第 265 次迭代并且 Dec_Pos_Dep 给出错误,我希望它在第 265 次迭代时给它更多的镜头。对此的一些解决方案将不胜感激。

【问题讨论】:

  • 如果Dec_Pos_Dep 成功,您可以在while-loop 和break-条件中使用try-函数。不知道,这样是不是个好办法……

标签: r for-loop error-handling try-catch


【解决方案1】:

这里有两件事很突出:

  1. 使用try(正如MartinGal 建议的那样)或tryCatch 将允许事情继续进行。至于重新运行该迭代,您需要以某种方式跟踪这些失败的运行并自己运行它们,没有告诉 R 重复 for 循环迭代的概念。
  2. 每次迭代都会丢弃数据,Dec_CD_95 每次都会被覆盖。也许您的意思是保留一些东西?

这里有一个建议:

iterSim <- 1000
out <- list()
while (length(out) < iterSim) {
   try({
     #Generate some random data
     Z <- NormalDGP(n=T, beta=coef_min, theta=Theta, rho=Rho, ...)
     y <- Z[1:(length(Z[,1])-1),1]
     x <- Z[2:length(Z[,1]),2]
     #Conduct the following tests! However, Dec_POS_Dep sometimes gives an error
     Dec_POS_Dep <- POS_Dep(y, x, simul=TRUE, trueBeta=coef_min, ...)
     Dec_POS_Fix <- POS_Fix(y, x, simul=TRUE, trueBeta=coef_min, ...)
     Dec_CD_95 <- CD_95(y, x, simul=TRUE)
     out <- c(out, list(Dec_POS_Dep, Dec_POS_Fix, Dec_CD_95))
  }, silent = TRUE)
}

诚然,这有点草率,但它应该总是以模拟的 1000 次迭代结束。

【讨论】:

  • 谢谢,这很有帮助。是的,我的代码肯定会捕获输出,但是,我没有在我的问题中包含这个以保持简短。感谢您的关注。
猜你喜欢
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
相关资源
最近更新 更多