如何避免打印/显示消息

How to avoid printing / showing messages

之前有人问过这个问题,但没有一个答案对我有用。

我正在使用图书馆 rhdf5 from bioconductor.org to read HDF5 files: source("http://bioconductor.org/biocLite.R"); biocLite("rhdf5"); 图书馆(rhdf5);

当我使用 h5read 函数读取包含引用的特定变量时,会打印以下警告消息:

"Warning: h5read for type 'REFERENCE' not yet implemented. Values replaced by NA's"

(它不像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, sink, options(warn, 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. 我也尝试了suppressForeignChecksuppressPackageStartupMessages以防万一
  5. {sink("/dev/null"); a <-h5read(f, "/#Link2#"); sink()}
  6. {options(warn=-1, max.print=1,show.error.messages=FALSE); a <-h5read(f, "/#Link2#") }

他们都不断发出相同的警告信息。

有谁知道我可以尝试的任何其他方法,或者为什么这些方法不起作用?

图书馆如何设法跳过所有这些来打印消息?听起来我可能做错了什么......

感谢任何帮助。

作为参考,这些是我使用的其他帖子:

您应该要求 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 警告。该示例还说明了如何通过 Rprintf() 写入 R 的输出流然后允许使用接收器捕获输出。

> 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()
>
不过,

None 其中的内容可以直接帮助您!

UPDATE 维护者更新了包的 'devel' 分支中的代码,版本 2.17.2.