我正在尝试使以下示例代码无需实际更改任何代码
result = 0
for(i in 1:10){
result = result + i
log("a") #I do not care about this error
result = result + i
}
这应该给出结果= 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的内容,但我认为我并不理解
答案 0 :(得分:4)
如果您只想运行代码,则可以改为使用try
:
result <- 0
for(i in 1:10){
result = result + i
try({log("a")}) #I do not care about this error
result = result + i
}
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“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
循环中完成。然后发生错误,“擦除”代码块的其余部分的执行,这是第二个赋值。但是,允许循环执行继续完成。
答案 1 :(得分:4)
您可以尝试使用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
}