Вопрос

Как можно "выдать" ошибку в 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")

или

<*>

Например,

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top