在markdown中抑制消息,但不在R控制台中

时间:2017-12-31 10:48:59

标签: r rstudio knitr r-markdown

我目前使用以下标题:

```{r, message=FALSE} 
foo <- function(x) message(x)
for(i in 1:10) foo(i)
```

在这个代码块中,有一个模拟场景的循环,message()函数打印当前执行场景的状态。

我想在RStudio和最终的HTML输出中禁止显示这些消息,但我仍然希望控制模拟进度并在控制台中查看message()输出。这可以实现吗?也许还有其他参数/​​函数?

2 个答案:

答案 0 :(得分:0)

您可以在文件中写入/追加状态(这是一种解决方法,应该有更直接的答案)。

例如:

file <- file("status.txt", open = "wt")
sink(file, type = "message")
message("all good")

在此示例中,不会显示消息 - 它将被写入status.txt文件。

在您使用特定功能并迭代一组时,您可以尝试以下示例:

foo <- function(x) {
    message(x)
}

file <- file("status.txt", open = "wt")
sink(file, type = "message")
for(i in 1:3) {
    foo(i)
}

函数foo应该返回(消息)值,但是它会将其附加到status.txt文件。

您可以使用带有status.txt参数的bash tail命令跟踪-f文件中的更改。首先将R发送到后台,然后在控制台中使用tail -f status.txt

答案 1 :(得分:0)

一种方法是将其放在文件的开头。

mymessage <- function (text) {   
  if(knitr::opts_knit$get('out.format') != NULL) message(text) 
}

有多种方法可以知道你是否在knitr中,最近的版本有knitr::is_latex_output和类似的。