Вы можете использовать функцию 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