为什么在 Rmarkdown 中抑制错误不起作用?

问题描述

我想抑制 Rmw 文件中的错误。所以,我试图设置全局块选项 error=TRUE,但它不起作用。此外,直接在块中设置块选项 error=TRUE 也不起作用。 这是一个示例代码


\begin{document}
\SweaveOpts{concordance=TRUE}

abc 
<<setup,cache=F,include=F>>=
library(knitr)
library(formatR)
opts_chunk$set(error=TRUE)
knit_hooks$set(error=TRUE)
@

<<a,error=TRUE>>=
A <- 5
# of course,that doesnt work,but i want the error message as chunk output
A * B
@
\end{document}

我不明白为什么它不起作用

只有错误信息: “eval(expr,.GlobalEnv) 中的错误:找不到对象‘L’” 出现。

解决方法

您似乎在使用来自基础 R 的 Sweave 而不是 knitr。如果您使用的是 knitr,则会收到有关 \SweaveOpts{concordance=TRUE} 语句的警告。

如果您使用的是 RStudio,这是项目选项之一。如果您直接运行,请运行 knitr::knit("<your filename>"),而不是 Sweave("<your filename>")

还有一些其他错误会阻止 knitr 工作;此版本修复了它们:

\documentclass{article}

\begin{document}

abc 
<<setup,cache=F,include=F>>=
library(knitr)
library(formatR)
opts_chunk$set(error=TRUE)
@

<<a,error=TRUE>>=
A <- 5
# of course,that doesnt work,but i want the error message as chunk output
A * B
@
\end{document}

变化是:

  • 您需要在开头使用 \documentclass 行。
  • 您不想要 \SweaveOpts{concordance=TRUE} 语句。
  • 您不想要 knit_hooks$set(error=TRUE) 语句。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...