2013-02-15 63 views
1

我正在研究R軟件包短片,並且有許多情況下我想將錯誤輸出包括在文檔中作爲用戶的示例。如何將R stderr輸出包含在Sweave文檔中

所以Sweave代碼塊

<<throws_error>>= 
stop('hello') 
@ 

在理想情況下生產出

stop('hello') 
Error: hello 

我真實的例子是一個相當長的運行過程中,我想拍攝警告輸出文件和消息以及錯誤。

我已經搞亂了各種Sweave代碼塊包括params。我唯一提出的解決方案是有一個隱藏的代碼塊,用cat()打印錯誤文本 - 這種類型會破壞使用Sweave的目的。似乎可能有一個解決方案可能與sink()函數以某種方式重定向標準錯誤,但一直無法弄清楚。有什麼建議麼?

+0

如何逐字乳膠環境? – 2013-02-15 08:07:34

+0

Duplicate:http://stackoverflow.com/q/3131270/946850 – krlmlr 2013-02-15 08:14:36

+0

補充說明我的問題,這是一個長期運行的過程(所以我寧願不運行兩次,因爲主要答案建議),我也會喜歡捕捉警告輸出,我不認爲'貓()'會抓住。 – skyebend 2013-02-15 16:22:31

回答

2

你用Sweave還是knitr來生成你的LaTeX和pdf文件?

在RStudio下默認使用knitr,生成的文檔幾乎就是你想要的。

在Sweave,您可以使用以下解決方法,從this message on R-help採取:

%outputs the R code but does not execute it. So no error 
<<echo=TRUE, eval=FALSE>>= 
stop('hello') 
@ 

% executes the code but displays only the error 
<<echo=FALSE, eval=TRUE>>= 
cat(try(stop('hello'))) 
@ 
+0

我用Sweave,我會用knitr試試。如果我走這條路線,有沒有辦法讓'R CMD build'或CRAN的構建過程知道在重建包裝短片時使用kniter而不是Sweave? – skyebend 2013-02-15 16:13:41

+1

@skyebend R 3.0.0應該可能沒有解決方法。看到這裏:http://yihui.name/knitr/demo/vignette/ – juba 2013-02-15 16:23:18

+0

Knitr很棒!但是我被困在R 2中。*現在,所以我的.Rnw文件失敗了'R CMD check'。 :-(希望可以在幾個月內轉入R 3,隱藏的'cat(try())'解決方案對我無效,因爲它包含輸出中的調用: %執行代碼,但僅顯示錯誤 <<呼應= FALSE,EVAL = TRUE >> = 貓(嘗試(停止( '你好'))) @ 錯誤的嘗試(停止( 「你好」)):你好 它表明'warning()'文本,而不是'message()'文本。 – skyebend 2013-02-15 23:21:52

相關問題