【问题标题】:Hide printing statement in RMarkdown在 RMarkdown 中隐藏打印语句
【发布时间】:2018-03-21 00:21:08
【问题描述】:

有没有办法在 RMarkdown 中隐藏打印语句?我编写了一个函数,它将算法学习行为的进度打印到 R 控制台。这是一个例子:

f <- function() {
  print("Some printing")
  return(1)
}

在 RMarkdown 我有

```{r, eval = TRUE, results = "show"}
res = f()
print(res)
```

这会将“一些打印”和 1 添加到 RMarkdown 输出文件中。有没有办法抑制“一些打印”,但保留函数的输出(这里是 1)?对于警告、错误和消息,有一些选项,但我找不到用于打印语句的选项。

【问题讨论】:

标签: r r-markdown


【解决方案1】:

如果您在函数中使用message 而不是print,则可以隐藏消息

```{r} 
f <- function() {
    message("Some printing")   # change this line
    return(1) 
}

res <- f()    
print(res)    # original prints both  
```
#> Some printing
#> [1] 1

使用suppressMessages

```{r} 
res <- suppressMessages(f())
print(res) 
```
#> [1] 1

或通过message=FALSE 块选项:

```{r, message=FALSE} 
res <- f()
print(res) 
```
#> [1] 1

专为此类用途设计的消息。如果你真的想保留print,你可以子集化(这很尴尬),或者使用capture.output来捕获和存储消息,同时将结果存储在另一个变量中:

```{r}
f <- function() {
    print("Some printing")
    return(1)
}

trash <- capture.output(res <- f())   
print(res)
```
#> [1] 1

...但这仍然很尴尬。

【讨论】:

  • 使用message 可能是最简单的解决方案。虽然我个人不喜欢它打印到 R 控制台的红色。看起来像一个错误...
  • 是的,一些更好的突出显示会很好,但除非你在针织结果上设置了类似的突出显示,否则它可能都只是灰色的。但是,您始终可以看到消息和错误之间的区别,因为错误总是以“错误”开头,就像print 的结果之前有一个索引,例如print('foo'); cat('foo\n'); message('foo'); stop('foo')。我确信可以编写一个自定义钩子来区分打印,但这并不是一件容易的事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 2013-10-22
  • 2013-11-05
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
相关资源
最近更新 更多