2016-02-03 36 views
3

可能有人請解釋爲什麼在RMD代碼(以使用RStudio一個HTML報告)下方只有cat命令正在顯示?當我將cat命令移到if子句之外或將其註釋掉時,將打印表格。我相信使用library(printr)時會發生同樣的情況,但我還沒有用最少的樣本證實這一點。數據表不與cat命令組合印刷在RMD/RStudio

看起來if子句中的代碼是以某種方式解釋在一起的,並且catdatatable不一致。

如果你可以給我如何調試這一些線索,這將是有益的,太。因爲沒有任何警告/錯誤消息。

--- 
title: "test" 
output: 
    html_document 
--- 


```{r} 
if(TRUE){ 
    DT::datatable(iris) 
    cat("I am here with my cat") 
} 

``` 
+0

隱式打印不for循環,並且如果塊中工作。在這種情況下,你需要明確使用'打印(對象)' – Benjamin

+0

對不起,我不明白....印刷(DT ::數據表(IRIS))不工作 – user224637

+0

這讓我驚訝的打印對象。當我到達電腦時,我將不得不看看這個。它可能與你的塊選項有關。目前,您的代碼返回控制檯輸出,'datatable'可能需要一些幫助才能正確呈現 – Benjamin

回答

5

這與knitr#1137基本相同。 HTML widgets,包括DT/DataTables,僅當它們從頂級 R表達式生成時才起作用。這是因爲只有頂級表達式實際上是印刷。不在頂層的表達式只有評估。這兩起案件有很大的區別。打印涉及調用打印功能。在大多數情況下,這個功能不是奇怪,print()(或S4對象的show())。在knitr世界,它是更爲複雜比:默認的打印功能是knitr::knit_print,這是非常相似的print(),但它確實還有一兩件事,除了生成文本輸出,這是收集的元數據(例如HTML依賴性)正在打印的對象。針織完成後,rmarkdown將解析的元數據轉換成相應的HTML代碼(例如,在<head><script src="dataTables.js"></script>)。

綜上所述,如果表達式不在頂層,無論是打印或元數據採集完成,所以沒有辦法對窗口小部件被實際呈現。

一個簡單的例子來說明這一點:

if (TRUE) { 

    1:10 # not printed 

    11:20 # printed because this is the visible value returned by if() 

} 
+0

現在我很好奇 - 你會介意添加一個簡短的解釋(或參考)爲什麼會發生這種情況? –

+0

當然。請參閱我的編輯。 –

+0

感謝您對此進行闡述。我仍在消化你的答案... –