2013-02-15 40 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

相关问题