如果出现错误/警告,请在tryCatch中运行一个函数

时间:2017-12-05 16:54:50

标签: r try-catch

我正在使用tryCatch函数,我希望在出现错误/警告的情况下运行其他函数。另一个函数取决于某些参数,由于某些原因,tryCatch在它们是错误和警告函数时无法识别它们。 这是一个简化的功能,我面临同样的问题:

essai <- function(x){
 y <- 2
 result <- tryCatch({
  sqrt(x*y)
 } , warning = function(cond,x,y) {
  message(cond)
  sqrt(abs(x*y))
 } , error = function(cond,x,y) {
  message(cond)
  sqrt(abs(x*y))
 } , finally = {
  message("done")
 } )
}

nbs <- c(1,2,3,-1,-2)
lapply(nbs, essai)

但是我在这里有一条错误消息Error in value[[3L]](cond) : argument "x" is missing, with no default。 R不明白它必须重用失败函数中使用的x和y,为什么?

1 个答案:

答案 0 :(得分:2)

errorwarning接受一个参数的功能。这很好用:

essai <- function(x, cond = 'problem'){
  y <- 2
  result <- tryCatch({
    sqrt(x*y)
  } , warning = function(w) {
    message(cond)
    sqrt(abs(x*y))
  } , error = function(e) {
    message(cond)
    sqrt(abs(x*y))
  } , finally = {
    message("done")
  } )
}

其余参数可以在essai函数中指定,并且可以从警告和错误中获取。

nbs <- c(1,2,3,-1,-2)
lapply(nbs, essai)
#done
#done
#done
#problem
#done
#problem
#done
# [[1]]
# [1] 1.414214
# 
# [[2]]
# [1] 2
# 
# [[3]]
# [1] 2.44949
# 
# [[4]]
# [1] 1.414214
# 
# [[5]]
# [1] 2