2

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

我正在使用来自 bioconductor.org 的库rhdf5来读取 HDF5 文件: source(" http://bioconductor.org/biocLite.R "); biocLite("rhdf5"); 图书馆(rhdf5);

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

“警告:'REFERENCE' 类型的 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/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#") }

它们都不断产生相同的警告信息。

有谁知道我可能会尝试的任何其他事情,或者为什么这些事情不起作用?

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

任何帮助表示赞赏。

正如参考这些是我使用的其他帖子:

4

1 回答 1

3

您应该要求maintainer("rhdf5")提供一个解决方案——不那么频繁地打印消息,并使用标准的 R 警告——该消息来自C 代码并使用 printf() 而不是Rf_warning()orRf_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()然后允许使用 sink 捕获输出。

> 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()
>

但是,这些都不能直接帮助您!

更新维护者更新了包的“开发”分支中的代码,版本 2.17.2。

于 2016-06-30T09:30:23.580 回答