2017-03-16 30 views
4

我有一個通過message()報告進度的功能。在正常使用情況下,這是可取的,如果需要,可以通過suppressMessages()來抑制消息。編織R爲PDF時的限制信息輸出

但是,我正在寫一個調用此函數的小插件(在Rmarkdown中),結果包括這些進度更新的整個頁面。我想包括前幾行的信息,但不要浪費整個頁面。有沒有辦法配置這個?

我試過通過塊選項R.options=list(max.print=10), as suggested in another answer here,但這似乎並不適用於消息。或者至少,不是在這種情況下,每個函數內一次或兩次生成實際消息,但該函數被稱爲循環的一部分。

我工作的一般結構爲:

function1 <- function(file.list){ 
    res <- list() 
    for(i in seq_along(file.list)){ 
     message("processing ", file.list[i]) 
     res[i] <- function2(file.list[i]) 
    } 
} 

function2 <- function(file){ 
    message("analyzing ", file) 
    tryVal <- try(res <- analysisFunction(file), silent = TRUE) 
    if(inherits(tryVal, "try-error")){ 
     message("*** problem with ", file, " ***") 
    } else { 
     ## additional processing 
    } 
    return(res) 
} 

降價塊看起來是這樣的:

```{r batchFlowHist, R.options=list(max.print=10)} 
batch1 <- function1(flowPloidyFiles) 
``` 

我想我的小插曲,從最初的幾個文件顯示消息被處理,但不是整個循環。有沒有辦法做到這一點?

回答

5

原來這已經在knitr中通過message參數支持。鏈接的答案表明它不起作用,但自從發佈後,它必須已被添加。所以以下解決了我的問題:

```{r batchFlowHist, message = 1:10} 
batch1 <- function1(flowPloidyFiles) 
```