Подавить предупреждающие сообщения C в R - PullRequest
6 голосов
/ 13 января 2012

Я вызываю функцию R из пакета R e1071, который связан с libsvm (программа на C).Эта функция передает предупреждения C (printf) на консоль R.Я знаю это, потому что предупреждающие сообщения имеют форму (предупреждение: ...), тогда как предупреждающие сообщения R пишутся с большой буквы (т.е. Предупреждение: ...).

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

Есть идеи?

Спасибо!

1 Ответ

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

Функция использует stdio вместо Rprintf / REprintf или warning, поэтому перенаправление выхода R не будет работать.Правильное решение состоит в том, чтобы исправить вызовы в libsvm, чтобы вместо них использовать вывод R.

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

Если вы хотите действительно дурацкое, грязное, но быстрое решение, запустите вашу функцию в collect(parallel(..., silent=TRUE))[[1]] из multicore - она ​​подавляет stdout (вы можетедобавьте multicore:::closeStderr(), если вы хотите отключить stderr ).

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