Как написать свою первую функцию tryCatch() в R


Вы можете использовать функцию tryCatch() в R, чтобы вернуть значение некоторого выражения или создать собственное сообщение, если обнаружено предупреждение или ошибка.

Эта функция использует следующий базовый синтаксис:

my_function <- function (x, y){
 tryCatch (
 #try to do this
 {
 #some expression
 },
 #if an error occurs, tell me the error
 error= function (e) {
 message('An Error Occurred')
 print(e)
 },
 #if a warning occurs, tell me the warning
 warning= function (w) {
 message('A Warning Occurred')
 print(w)
 return (NA)
 }
 )
}

В следующих примерах показано, как использовать функцию tryCatch() на практике.

Пример: создание функции tryCatch() в R

Предположим, мы создаем следующую функцию tryCatch() , которая пытается взять журнал одного значения, а затем разделить на второе значение.

Если произойдет ошибка, мы создадим сообщение «Произошла ошибка», а затем распечатаем ошибку в R.

Если возникает предупреждение, мы создадим сообщение «Произошло предупреждение», напечатаем предупреждение в R, а затем вернем значение NA.

Если не возникает ни ошибки, ни предупреждения, мы просто вернем результат функции.

log_and_divide <- function (x, y){
 tryCatch (
 {
 result = log(x) / y
 return (result)
 },
 error= function (e) {
 message('An Error Occurred')
 print(e)
 },
 warning= function (w) {
 message('A Warning Occurred')
 print(w)
 return (NA)
 }
 )
}

Давайте запустим эту функцию в разных сценариях.

Сценарий 1: никаких ошибок или предупреждений не возникает.

В следующем коде показано, как использовать функцию в сценарии, в котором не возникает ошибок или предупреждений.

#run function
log_and_divide(10, 2)

[1] 1.151293

Поскольку ошибок или предупреждений не возникает, функция просто возвращает результат выражения, который оказывается равным 1.151293 .

Сценарий 2: Произошла ошибка.

В следующем коде показано, как использовать функцию в случае возникновения ошибки:

#run function
log_and_divide(10)

An Error Occurred
<simpleError in doTryCatch(return(expr), name, parentenv, handler):
 argument "y" is missing, with no default>

Поскольку мы предоставили функции только один аргумент, мы получаем сообщение « Произошла ошибка », а также видим точную ошибку, созданную R.

Сценарий 3: появляется предупреждение.

В следующем коде показано, как использовать функцию в сценарии, в котором возникает предупреждение:

#run function
log_and_divide(-10, 2)

A Warning Occurred
<simpleWarning in log(x): NaNs produced>
[1] NA

Поскольку мы предоставили отрицательное значение для первого аргумента, R не может вычислить журнал отрицательного значения, поэтому мы получаем сообщение о том, что « Произошло предупреждение », мы видим точное предупреждение, созданное R, и функция возвращает NA как результат.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в R:

Как создать вложенный цикл for в R
Как добавить значения к вектору с помощью цикла в R
Как вернуть значение из функции в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.