簡體   English   中英

如何避免打印/顯示消息

[英]How to avoid printing / showing messages

之前曾有人問過這個問題,但沒有一個答案對我有用。

我正在使用bioconductor.org中的rhdf5庫讀取HDF5文件:source(“ http://bioconductor.org/biocLite.R ”); biocLite( “rhdf5”); 庫(rhdf5);

當我使用h5read函數讀取包含引用的特定變量時,將顯示以下警告消息:

“警告:類型'REFERENCE'的h5read尚未實現。將值替換為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,抑制消息/警告,接收器,選項(警告,最大打印,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代碼,並使用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()
>

但是,這些都不能直接幫助您!

UPDATE維護人員更新了該包的“開發”分支(版本2.17.2)中的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM