Подтвердить что ты не робот

Эквивалент "броска" в R

Как "выбросить" ошибку в R? У меня есть функция, которая принимает фрейм данных и некоторые имена столбцов и делает с ними все. Если столбцы не существуют, я хочу, чтобы функция остановилась и остановила все функции в зависимости от нее.

Я просмотрел recover и browse и traceback, но, похоже, они были близки, но не то, что я ищу.

4b9b3361

Ответ 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)

Например