2017-10-09 60 views
4

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

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

在RMarkdown我

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

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

+0

[This SO answer](https://stackoverflow.com/a/39289337/496488)可能会有所帮助。 – eipi10

回答

1

如果你在你的函数,而不是print使用message,可以抑制信息

```{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 

M为这种使用而设计的消息。如果你真的想保持print,你可以子集(这是尴尬),或使用capture.output捕获和存储信息,而存储在另一个变量的结果:

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

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

...但是,这仍然是相当尴尬。

+0

使用'message'可能是最简单的解决方案。虽然我个人不喜欢R打印机打印的红色。看起来像一个错误... – needRhelp

+0

是的,一些更好的突出显示将是很好的,但除非你在你的针织结果上设置了类似的突出显示,否则它可能只是灰色。但是,您始终可以看到消息和错误之间的差异,因为错误始终以“错误”开头,例如“print”的结果前面有一个索引,例如“ '打印( '富');猫( '富\ n');消息( '富');停止( '富')'。我相信可以编写自定义钩子来区分打印,但这不是一件容易的事情。 – alistaire