如何避免打印/显示消息
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):
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#") }
他们都不断发出相同的警告信息。
有谁知道我可以尝试的任何其他方法,或者为什么这些方法不起作用?
图书馆如何设法跳过所有这些来打印消息?听起来我可能做错了什么......
感谢任何帮助。
作为参考,这些是我使用的其他帖子:
- r: do not show warnings
- How to suppress warnings globally in an R Script
- suppress messages displayed by "print" instead of "message" or "warning" in R
- Suppress one command's output in R
您应该要求 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.
之前有人问过这个问题,但没有一个答案对我有用。
我正在使用图书馆 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):
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#") }
他们都不断发出相同的警告信息。
有谁知道我可以尝试的任何其他方法,或者为什么这些方法不起作用?
图书馆如何设法跳过所有这些来打印消息?听起来我可能做错了什么......
感谢任何帮助。
作为参考,这些是我使用的其他帖子:
- r: do not show warnings
- How to suppress warnings globally in an R Script
- suppress messages displayed by "print" instead of "message" or "warning" in R
- Suppress one command's output in R
您应该要求 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.