2015-04-24 6 views
0

в функции 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]: "

Есть ли другой способ сделать это? Благодарю.

+0

'stop' вернет любую строку, которую вы положили в нее. Не можете ли вы просто заменить 'stop (« error »)' на 'stop (« нецифровой аргумент на двоичный оператор »)', если вы предпочитаете начальную ошибку? – cdeterman

+0

Я знаю ,, но с 'stop' у вас все еще есть эта 1-я часть, которую вы не можете редактировать:'> stop ("error") Ошибка: error' –

ответ

2

Если вы просто хотите, чтобы stop не включал начальную часть сообщения об ошибке, вы просто устанавливаете аргумент call. на FALSE.

f <- function(x){ 
    tryCatch(
     expr = { 
      x <- 1 + x 
      return(x) 
     }, error = function(cond){ 
      stop("non-numeric argument to binary operator", call.=FALSE) 
     }) 
} 
x <- 1 
x <- f("a") 

Error: non-numeric argument to binary operator 

x 
[1] 1 
+0

Спасибо! Это делает сообщение об ошибке более понятным в моем случае без начальной части! –

Смежные вопросы