鉴于以下R knitr文件:
\documentclass{article}
\begin{document}
<<data>>=
opts_chunk$set(comment = NA) # omits "##" at beginning of error message
x <- data.frame(x1 = 1:10)
y <- data.frame()
@
<<output_x>>=
if (nrow(x) == 0) stop("x is an empty data frame.") else summary(x)
@
<<output_y>>=
if (nrow(y) == 0) stop("y is an empty data frame.") else summary(y)
@
\end{document}
正如预期的那样,最后一个块会返回自定义消息的错误。编译后的PDF看起来有点不同:
Error: y is an empty data frame.
我希望这个文字只是
y is an empty data frame.
没有Error:
部分或红色。我能做到吗?怎么样?
编辑:我可以通过以下解决方法在模拟数据中创建它:
<<output_y>>=
if (nrow(y) == 0) cat("y is an empty data frame.") else summary(y)
@
但是,这不适用于我的实际数据,因为我需要在此时停止该功能。
答案 0 :(得分:1)
虽然我不明白为什么不应该调用错误Error
,但您可以自由地自定义输出挂钩error
以从消息中删除Error:
:
library(knitr)
knit_hooks$set(error = function(x, options) {
knitr:::escape_latex(sub('^Error: ', '', x))
})
答案 1 :(得分:0)
你可以这样做。 options("show.error.messages" = FALSE)
会关闭错误消息,因此您可以在输入if
语句后暂时使用该消息,并使用on.exit
重置该消息。
这样,stop
停止了该功能,避免了Error:
,并且所需的信息以红色打印。
> f <- function(x) {
if(x > 5) {
g <- getOption("show.error.messages")
options(show.error.messages = FALSE)
on.exit(options(show.error.messages = g))
message("x is greater than 5.")
stop()
}
x
}
> f(2)
# [1] 2
> f(7)
# x is greater than 5.
注意:我不确定这是多么安全,而且我不是改变功能内options
设置的大支持者。