2017-10-09 197 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