R Script - Как продолжить выполнение кода при ошибке - PullRequest
29 голосов
/ 13 января 2012

Я написал скрипт R, который включает цикл, который извлекает внешние (веб) данные.Формат данных в большинстве случаев один и тот же, однако иногда формат меняется непредсказуемым образом, и мой цикл падает (останавливается).

Есть ли способ продолжить выполнение кода независимо от ошибки?Я ищу что-то похожее на "Об ошибке Resume Next" от VBA.

Заранее спасибо.

Ответы [ 3 ]

33 голосов
/ 13 января 2012

Используйте try или tryCatch.

for(i in something)
{
  res <- try(expression_to_get_data)
  if(inherits(res, "try-error"))
  {
    #error handling code, maybe just skip this iteration using
    next
  }
  #rest of iteration for case of no error
}

Современный способ сделать это использует purrr::possibly.

Сначала напишите функцию, которая получает ваши данные, get_data().

Затем измените функцию, чтобы она возвращала значение по умолчанию в случае ошибки.

get_data2 <- possibly(get_data, otherwise = NA)

Теперь вызовите измененную функцию в цикле.

for(i in something) {
  res <- get_data2(i)
}
6 голосов
/ 13 января 2012

Вы можете использовать try:

# a has not been defined
for(i in 1:3)
{
  if(i==2) try(print(a),silent=TRUE)
  else print(i)
}
4 голосов
/ 31 января 2013

Как насчет этих решений по этому смежному вопросу:

Есть ли способ для `source ()` и продолжения после ошибки?

Либо parse(file = "script.R")с последующим циклом try(eval()) для каждого выражения в результате.

Или пакет evaluate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...