如何使tryCatch实际捕获错误
如果参数不满足很多条件,我必须调用一个抛出错误的函数 条件非常复杂,我无法在100%的时间内尝试满足它们(我必须重新键入函数内部检查的所有条件)。 相反,我应该用不同的参数重试调用(尽可能多次地填充我的表) 在其他语言中,我可以围绕调用编写catch块 然而,在R tryCatch中,工作方式似乎有所不同:您可以使用如何使tryCatch实际捕获错误,r,error-handling,try-catch,R,Error Handling,Try Catch,如果参数不满足很多条件,我必须调用一个抛出错误的函数 条件非常复杂,我无法在100%的时间内尝试满足它们(我必须重新键入函数内部检查的所有条件)。 相反,我应该用不同的参数重试调用(尽可能多次地填充我的表) 在其他语言中,我可以围绕调用编写catch块 然而,在R tryCatch中,工作方式似乎有所不同:您可以使用finally=来给出代码,但是在执行finally代码之后,外部函数仍然会终止 下面是一个简单的例子: sometimesError <- function() {
finally=
来给出代码,但是在执行finally代码之后,外部函数仍然会终止
下面是一个简单的例子:
sometimesError <- function() {
if(runif(1)<0.1) stop("err")
return(1)
}
fct <- function() {
theSum <- 0
while(theSum < 20) {
tryCatch( theSum <- theSum + sometimesError() )
}
return(theSum)
}
fct() # this should always evaluate to 20, never throw error
sometimesError您可以将一个函数传递给tryCatch
的error
参数,以指定出现错误时应执行的操作。在这种情况下,当出现错误时,可以只返回0
fct <- function() {
theSum <- 0
while(theSum < 20) {
theSum <- theSum + tryCatch(sometimesError(), error=function(e) 0)
}
return(theSum)
}
使用try(,silent=TRUE)
而不是tryCatch
在这里给你想要的东西吗?我几天前做了类似的事情,我会检查…Facepalm。它起作用了!请创建一个简短的答案,我会接受它。谢谢@罗尔。脸掌。它起作用了!请创建一个简短的答案,我会接受它。谢谢
fct <- function() {
theSum <- 0
while(theSum < 20) {
try(theSum <- theSum + sometimesError(), silent=TRUE)
}
return(theSum)
}