显然,try和trycatch对这个问题不起作用!有其他解决方案吗?
我正在尝试让下面的示例代码正常工作,而不实际更改任何代码
result = 0
for(i in 1:10){
result = result + i
log("a") #I do not care about this error
result = result + i
}结果应该是result = 110
如果我真的手动复制循环中的部分并增加计数器,它就能完美地工作:
result = 0
#iteration 1
i = 1
result = result + i
log("a")
result = result + i
#iteration 2
i = i+1
result = result + i
log("a")
result = result + i
#iteration 3
i = i+1
result = result + i
log("a")
result = result + i
#etc.然而,我的实际代码大约有1000行,需要循环几百次。
所以我想有一些选择
options(on.error.just.continue.the.next.line) = TRUE我读过关于try/tryCatch的文章,但我想我不能正确理解它
发布于 2016-08-04 21:18:55
如果你只想让代码运行,你可以改用try:
result <- 0
for(i in 1:10){
result = result + i
try({log("a")}) #I do not care about this error
result = result + i
}日志中的
错误(“a”):数学函数的非数字参数
日志中出错(“a”):数学函数的非数字参数
日志中出错(“a”):数学函数的非数字参数
日志中出错(“a”):数学函数的非数字参数
日志中出错(“a”):数学函数的非数字参数
日志中出错(“a”):数学函数的非数字参数
日志中出错(“a”):数学函数的非数字参数
日志中出错(“a”):数学函数的非数字参数
日志中出错(“a”):数学函数的非数字参数
日志中出错(“a”):数学函数的非数字参数
result
[1] 110要关闭该消息,请使用
try({log("a")}, silent=TRUE)如果您担心更大的代码块,可以将其包装在{ }中,如下所示:
result <- 0
for(i in 1:10){
try({ # start code block
result = result + i
log("a") # I do not care about this error
result = result + i
}, silent=TRUE) # end of try function
}
result
[1] 55在这里,对结果的第一个赋值在for循环中完成。然后发生错误,“清除”其余代码块的执行,这是这里的第二个赋值。但是,允许循环执行通过完成继续执行。
发布于 2016-08-04 21:19:31
您可以尝试使用try catch块:
result = 0
for (i in 1:10) {
result = result + i
tryCatch({
log("a") #I do not care about this error
}, warning = function(w) {
# comment out the next print statement for a silent warning
print("warning")
}, error = function(e) {
# comment out the next print statement for a silent error
print("error")
}, finally = {
# cleanup
}
result = result + i
}https://stackoverflow.com/questions/38768398
复制相似问题