Как избежать печати / показа сообщений
Этот вопрос задавался ранее, но ни один из ответов не работает для меня.
Я использую библиотеку rhdf5 от bioconductor.org для чтения файлов HDF5: источник (" http://bioconductor.org/biocLite.R "); biocLite ("rhdf5"); библиотека (rhdf5);
Когда я использую функцию h5read для чтения определенных переменных, которые содержат ссылки, выводится следующее предупреждение:
"Предупреждение: h5read для типа" REFERENCE "еще не реализован. Значения заменены на NA"
(Не отображается красным, как ошибки и предупреждения в RStudio. Просто черным)
Предупреждение в порядке для меня, так как мне не нужны эти ссылки. Но я использую эту функцию для чтения сотен переменных, поэтому мой экран загрязняется этими сообщениями. Например:
a <-h5read(f, "/#Link2#")
Warning: h5read for type 'REFERENCE' not yet implemented. Values replaced by NA's
Warning: h5read for type 'REFERENCE' not yet implemented. Values replaced by NA's
Я перепробовал все предложения, которые нашел (capture.output, suppressMessage/Warning, сток, опции (warn, max.print, show.error.messages):
capture.output(a <- h5read(f, "/#Link2#"), file='/dev/null')
- Я тоже пробовал невидимку на всякий случай:
invisible(capture.output(a <- h5read(f, "/#Link2#"), file='/dev/null'))
suppressWarnings(suppressMessages(a <- h5read(f, "/#Link2#")))
- Я тоже пробовал
suppressForeignCheck
а такжеsuppressPackageStartupMessages
так, на всякий случай {sink("/dev/null"); a <-h5read(f, "/#Link2#"); sink()}
{options(warn=-1, max.print=1,show.error.messages=FALSE); a <-h5read(f, "/#Link2#") }
Все они продолжают выдавать одни и те же предупреждающие сообщения.
Кто-нибудь знает что-нибудь еще, что я мог бы попробовать, или почему эти вещи не работают?
Как библиотеке удается распечатать сообщения, пропуская все это? Похоже, я что-то не так делаю...
Любая помощь приветствуется.
Так же, как ссылки, это другие посты, которые я использовал:
1 ответ
Вы должны спросить maintainer("rhdf5")
чтобы обеспечить решение - печатать сообщение реже и использовать стандартные R-предупреждения - это сообщение из кода C и использует printf(), а не Rf_warning()
или же Rf_ShowMessage()
или же Rprintf()
/ REprintf()
,
Вот иллюстрация проблемы
> library(inline)
> fun = cfunction(character(), 'printf("hello world\\n"); return R_NilValue;')
> fun()
hello world
NULL
> sink("/dev/null"); fun(); sink()
hello world
>
и решение - использовать Rf_warning()
генерировать R предупреждений. Пример также иллюстрирует, как запись в выходной поток R через Rprintf()
затем позволил бы захватить результат с раковиной.
> fun = cfunction(character(), 'Rf_warning("hello world"); return R_NilValue;')
> x = fun()
Warning message:
In fun() : hello world
> x = suppressWarnings(fun())
> fun = cfunction(character(), 'Rprintf("hello world\\n"); return R_NilValue;')
> sink("/dev/null"); fun(); sink()
>
Ничто из этого не поможет вам напрямую!
ОБНОВЛЕНИЕ сопровождающий обновил код в ветке 'devel' пакета, версия 2.17.2.