2016-06-30 4 views
2

этот вопрос задан раньше, но ответы на них не работают.Как избежать печати/отображения сообщений

Я пользуюсь библиотекой rhdf5 с bioconductor.org для чтения файлов HDF5: source ("http://bioconductor.org/biocLite.R"); biocLite ("rhdf5"); библиотека (rhdf5);

Когда я использую функцию h5read читать некоторые переменные, которые содержат ссылки на следующее предупреждение выводится сообщение:

«Предупреждение. H5read для типа„ССЫЛКА“еще не реализованы ценности заменены 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/Предупреждение, раковина, опции (предостерегают, max.print, show.error.messages):

  1. capture.output(a <- h5read(f, "/#Link2#"), file='/dev/null')
  2. Я также попытался невидим только в случае, если: invisible(capture.output(a <- h5read(f, "/#Link2#"), file='/dev/null'))
  3. suppressWarnings(suppressMessages(a <- h5read(f, "/#Link2#")))
  4. Я также попытался suppressForeignCheck и suppressPackageStartupMessages только в случае
  5. {sink("/dev/null"); a <-h5read(f, "/#Link2#"); sink()}
  6. {options(warn=-1, max.print=1,show.error.messages=FALSE); a <-h5read(f, "/#Link2#") }

Все они продолжать производить те же предупреждающие сообщения.

Кто-нибудь знает какие-либо другие вещи, которые я могу попробовать, или почему эти вещи не работают?

Как библиотеке удается распечатать сообщения, пропускающие все это? Звучит, что я мог бы что-то делать неправильно ...

Любая помощь приветствуется.

Подобно тому, как ссылки эти другие должности, которые я использовал:

+1

hmmm может быть 'a <- try (..., silent = TRUE)'? –

+0

@ DominicComtois Это для ошибок, 'try' игнорирует предупреждения. –

+0

Удалили бы ссылки из данных, чтобы быть жизнеспособным обходным путем? –

ответ

3

Вы должны спросить maintainer("rhdf5") предоставить решение - печатать сообщение реже и используйте стандартные предупреждения R - сообщение от C code и использует 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() 
> 

Ничего из этого не поможет вам, хотя!

UPDATE сопровождающий обновил код в ветке «devel» пакета, версия 2.17.2.

+0

Учитывая, что у поддерживающего сейчас есть собственная исследовательская группа, есть, к сожалению, высокая вероятность того, что быстрого ответа не будет (EDIT: возможно, может быть, я просто заметил, кто недавно совершил это). Возможно, быстрее исправить код (и, возможно, предоставить его Bioconductor по запросу). Или попробуйте другую библиотеку HDF5. На CRAN есть [h5] (https://cran.r-project.org/web/packages/h5/index.html). Не знаю о его качестве, но он активно поддерживается. –

+0

Большое спасибо @ Мартин Морган. Вы совершенно правы, что, к сожалению, не существует быстрого решения проблемы :-( Я буду оценивать, используя H5, но я не хочу иметь зависимость от обеих библиотек, а код с использованием rhdf5 уже прекратился. – MAB

+0

Я отправил элемент в веб-сайте поддержки Bioconductor: https://support.bioconductor.org/p/84611/ – MAB