Вопрос
Как можно "выдать" ошибку в R?У меня есть функция, которая принимает фрейм данных и некоторые имена столбцов и что-то с ними делает.Если столбцы не существуют, я хочу, чтобы функция остановилась и все функции, зависящие от нее, были остановлены.
Я посмотрел на recover
и browse
и traceback
но, ну, они, казалось, были близки, но не то, что я ищу.
Решение
См. help (tryCatch)
:
Условия обозначены <Код> signalCondition код> '. Кроме того,
Функцииstop
иwarning
имеют был изменен, чтобы также принять
аргументы условия.
и позже в разделе «Смотрите также»:
Условия сигналов'
stop
' и 'warning
', а 'try
' по сути упрощенная версияtryCatch
.
так что вы, вероятно, хотите stop
.
Другие советы
Простой пример:
f <- function(a, b){
if (a == 0){
stop("error message")
}
}
Помимо базовых функций, о которых упоминает Дирк:
пакет R.oo имеет дополнительное исключение функциональность обработки, включая функцию throw (), которая очень полезна. Вы можете ловить исключения с помощью обычных функций try или trycatch:
> try(throw("Division by zero.")); print("It's ok!");
Error: [2009-10-22 10:24:07] Exception: Division by zero.
[1] "It's ok!"
Подробнее об этом можно прочитать здесь: http: //www1.maths. .lth.se / помощь / R / R.oo /
На самом деле функция stopifnot
это очень удобно для реализации проверки работоспособности в вашем коде.Он принимает несколько логических выражений и возвращает ошибку, если какое-либо из них принимает значение false.
Пример:Чтобы проверить, существует ли столбец 'c' во фрейме данных 'df':
df <- data.frame(a = numeric(), b = numeric())
stopifnot(!is.null(df$c))
Это выдаст следующую ошибку:
Error: !is.null(df$c) is not TRUE
Вы можете проверить, существует ли столбец, и делать все, что захотите.
Предположим, что data.frame
с именем df1
и проверяет, существует ли столбец col1
:
if(! any(grepl('^col1
или
if(! any(grepl('^col1
Например,
,colnames(df1)))) stop("nonexistent column")
или
<*>
Например,
,colnames(df1)))) return(-1)
Например,
,colnames(df1)))) stop("nonexistent column")или
<*>Например,