如果函数出错,请再次尝试该迭代 (R)
If a function gives error try that iteration again (R)
Whosebug 上有类似的问题,但是,我找不到与我的问题相同(或相似)的解决方案。我 运行 在 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 给出错误并且模拟终止。如果出现错误,我不是在寻找跳过迭代的循环(根据 Whosebug 上的许多建议);但是,我希望重复该迭代。例如。如果代码在第 265 次迭代中并且 Dec_Pos_Dep 给出错误,我希望它在第 265 次迭代时给它更多的镜头。对此的一些解决方案将不胜感激。
这里有两件事很突出:
- 使用
try
(如 MartinGal 建议的那样)或 tryCatch
将允许事情继续进行。至于重新 运行 迭代,你需要以某种方式跟踪这些失败的 运行s 和 运行 他们自己,没有告诉 R 重复 for
循环迭代。
- 您在每次迭代中都丢弃了数据,
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 次模拟迭代结束。
Whosebug 上有类似的问题,但是,我找不到与我的问题相同(或相似)的解决方案。我 运行 在 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 给出错误并且模拟终止。如果出现错误,我不是在寻找跳过迭代的循环(根据 Whosebug 上的许多建议);但是,我希望重复该迭代。例如。如果代码在第 265 次迭代中并且 Dec_Pos_Dep 给出错误,我希望它在第 265 次迭代时给它更多的镜头。对此的一些解决方案将不胜感激。
这里有两件事很突出:
- 使用
try
(如 MartinGal 建议的那样)或tryCatch
将允许事情继续进行。至于重新 运行 迭代,你需要以某种方式跟踪这些失败的 运行s 和 运行 他们自己,没有告诉 R 重复for
循环迭代。 - 您在每次迭代中都丢弃了数据,
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 次模拟迭代结束。