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