Остановка сценария R без получения сообщения "ошибка во время обертки"

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

options(error = function() {
 cat(geterrmessage(),file = normalizePath("logs/messages.txt"),append = TRUE)
 stop()
})

это работает, но я получаю это сообщение в окне консоли/терминала, когда возникает ошибка:

Error during wrapup:
Execution halted

поэтому я думаю, что есть лучший способ прервать выполнение сценария... или есть?

1 ответов


Я только что нашел это внутри исходного кода R:

if (inError) {
    /* fail-safe handler for recursive errors */
    if(inError == 3) {
         /* Can REprintf generate an error? If so we should guard for it */
        REprintf(_("Error during wrapup: "));
        /* this does NOT try to print the call since that could
           cause a cascade of error calls */
        Rvsnprintf(errbuf, sizeof(errbuf), format, ap);
        REprintf("%s\n", errbuf);
    }

stop() вызывает выполнение обработчика ошибок. Если stop() вызов происходит в обработчике ошибок, R отображает Error during wrapup: сообщение и предотвращает бесконечную рекурсию, которая произошла бы в противном случае.

не называй stop() внутри options$error.

использовать q(save="no", status=1, runLast=FALSE) вместо этого это должно делать именно то, что обработчик ошибок по умолчанию делает для неинтерактивного использования. См.?options для смысл options$error и ?stop для получения подробной информации об обработке ошибок.