我正在使用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,为什么?
答案 0 :(得分:2)
error
和warning
接受一个参数的功能。这很好用:
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