Подавить сообщение об ошибке в R

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

Для этого я пробовал разные вещи:

library(base64)
suppressWarnings
suppressMessages
options(error = expression(NULL))

В первых двух вариантах, только предупреждения и сообщения превышены, так что никакой помощи. Если я правильно понял, в последнем случае все сообщения об ошибках следует избегать. Однако это не помогает, функция по-прежнему останавливается с сообщением об ошибке.

Есть ли у кого-нибудь идеи, почему это не работает так, как я ожидаю, что это сработает? Я искал интернет для решений, но мог найти только вышеупомянутые способы. В этой функции я запускаю симуляцию, часть кода анализируется внешней программой JAGS (Gibbs sampler), и сообщение об ошибке создается этим анализом. Может ли это быть, где это пойдет не так?

Обратите внимание, что мне не нужно подавать определенное/конкретное сообщение об ошибке, так как никаких других сообщений об ошибках не создано, это "достаточно хорошо", чтобы иметь опцию, которая подавляет только все сообщения об ошибках.

Спасибо за ваше время и помощь!

Ответ 1

Существует большая разница между подавлением сообщения и подавлением ответа на ошибку. Если функция не может выполнить свою задачу, она по необходимости будет возвращать ошибку (хотя некоторые функции имеют аргумент командной строки для принятия некоторых других действий в случае ошибки). Что вам нужно, как предложил Zoonekynd, - использовать try или trycatch для "инкапсулирования" ошибки, чтобы ваш основной поток программы продолжался, даже если функция не работает.

Ответ 2

Как было предложено предыдущим решением, вы можете использовать функции try или tryCatch, которые будут инкапсулировать ошибку (подробнее в Advanced R). Однако они не будут подавлять сообщение с сообщением об ошибках stderr по умолчанию.

Это может быть достигнуто установкой их параметров. Для try установите silent=TRUE. Для tryCatch установите error=function(e){}.

Примеры:

o <- try(1 + "a")
>  Error in 1 + "a" : non-numeric argument to binary operator
o <- try(1 + "a", silent=TRUE)  # no error printed

> o <- tryCatch(1 + "a")
Error in 1 + "a" : non-numeric argument to binary operator
> o <- tryCatch(1 + "a", error=function(e){})