в функции tryCatch, я бы не хотел возвращать NULL или что-либо, когда tryCatch не работает.Избегайте tryCatch возвращать что-то в случае сбоя
При назначении на объект выражение, которое возвращает ошибку, если объект уже существует его значение изменилось, разве например:
> x <- 1
> x
[1] 1
> x <- x + "a"
Error in x + "a" : non-numeric argument to binary operator
> x
[1] 1
И я хотел бы иметь такое же поведение с помощью tryCatch. Поэтому в этом примере после попытки tryCatch «x» по-прежнему «1», а не NULL.
f <- function(x){
tryCatch(
expr = {
x <- 1 + x
return(x)
}, error = function(cond){
message("error")
})
}
> x <- f(1)
> x
[1] 2
> x <- f("a")
error
> x
NULL
Использование stop
сделать трюк:
f <- function(x){
tryCatch(
expr = {
x <- 1 + x
return(x)
}, error = function(cond){
stop("error")
})
}
> x <- f(1)
> x
[1] 2
> x <- f("a")
Error in value[[3L]](cond) : error
> x
[1] 2
Но даже если я могу изменить 2-ю часть, stop
производит не Rly полезные сообщения об ошибках, то есть 1-й части «Ошибка в значении [3L]: "
Есть ли другой способ сделать это? Благодарю.
'stop' вернет любую строку, которую вы положили в нее. Не можете ли вы просто заменить 'stop (« error »)' на 'stop (« нецифровой аргумент на двоичный оператор »)', если вы предпочитаете начальную ошибку? – cdeterman
Я знаю ,, но с 'stop' у вас все еще есть эта 1-я часть, которую вы не можете редактировать:'> stop ("error") Ошибка: error' –