Есть ли у кого-нибудь примеры / руководства по обработке исключений в R? Официальная документация очень краткая.
r
exception-handling
непослушный
источник
источник
Ответы:
Помимо ответа Шейна, указывающего на другие обсуждения StackOverflow, вы можете попробовать функцию поиска кода. Этот исходный ответ указывал на поиск кода Google, который с тех пор был прекращен, но вы можете попробовать
Просто для записи, есть также,
try
ноtryCatch
может быть предпочтительнее. Я попробовал быстро подсчитать в Google Code Search, но попытка дает слишком много ложных срабатываний для самого глагола - но, похоже,tryCatch
он более широко используется.источник
В основном вы хотите использовать
tryCatch()
функцию. См. Справку ("tryCatch") для получения дополнительных сведений.Вот тривиальный пример (учтите, что с ошибкой можно делать все, что угодно):
Взгляните на эти связанные вопросы:
источник
Мне помог этот результат поиска в Google: http://biocodenv.com/wordpress/?p=15 .
источник
Функция
trycatch()
довольно проста, и по ней есть много хороших руководств. Отличное объяснение обработки в R ошибок можно найти в книге Hadley Уикхемы Advanced-R , а также то , что следует , является очень основным интроwithCallingHandlers()
иwithRestarts()
в нескольких слов , как это возможно:Допустим, программист низкого уровня пишет функцию для вычисления абсолютного значения. Он не знает, как это вычислить, но умеет конструировать ошибку и старательно передает свою наивность:
Программист среднего уровня также пишет функцию для вычисления абсолютного значения, используя крайне неполную
low_level_ABS
функцию. Он знает, что код низкого уровня выдаетnegative_value
ошибку, когда значениеx
отрицательное, и предлагает решение проблемы, устанавливая,restart
что позволяет пользователямmid_level_ABS
контролировать способmid_level_ABS
восстановления (или отказа) отnegative_value
ошибки.Наконец, высокоуровневый программист использует эту
mid_level_ABS
функцию для вычисления абсолютного значения и устанавливает обработчик условия, который сообщает, чтоmid_level_ABS
нужно восстанавливаться послеnegative_value
ошибки с помощью обработчика перезапуска.Суть всего в том, что с помощью
withRestarts()
иwithCallingHandlers()
функцияhigh_level_ABS
смогла сообщить,mid_level_ABS
как восстанавливаться после ошибок, вызванныхlow_level_ABS
ошибкой, без остановки выполненияmid_level_ABS
, с чем вы не можете сделатьtryCatch()
:На практике
low_level_ABS
представляет функцию, котораяmid_level_ABS
вызывает много (возможно, даже миллионы раз), для которой правильный метод обработки ошибок может варьироваться в зависимости от ситуации, а выбор того, как обрабатывать конкретные ошибки, предоставляется функциям более высокого уровня (high_level_ABS
).источник
Функция перезапуска очень важна в R, унаследованном от Lisp. Это полезно, если вы хотите вызвать какую-либо функцию в теле цикла, и вы просто хотите, чтобы программа продолжалась, если вызов функции рухнет. Попробуйте этот код:
источник