2016-09-22 139 views
5

我正在與rmarkdown和乳膠一起工作。我需要使用knitr::kable打印一組表格,但在for循環內不打印。R:爲什麼kable不能在for循環中打印?

這是我的代碼:

--- 
title: "project title" 
author: "Mr. Author" 
date: "2016-08-30" 
output: 
    pdf_document: 
    latex_engine: xelatex 
bibliography: biblio.bib 
header-includes: 
    - \usepackage{tcolorbox} 
--- 

Text and chunks that run ok. 

```{r loadLibraries} 
require(data.table) 
require(knitr) 
``` 

## Try to print a group of tables from split 

```{r results = "asis"} 
t1 <- data.table(a = sample(letters, 10, T), b = sample(LETTERS[1:3], 10, T)) 
t2 <- split(t1, t1$b) 

for (i in 1:length(t2)){ 
    kable(t2[[i]], col.names = c("A", "B")) 
} 
``` 

如果我使用results = "asis"或者如果我完全忽略它的不要緊,沒有打印到文檔

我試圖包圍print呼叫(print(kable(t2[[i]]...)內的kable呼叫,並將其成功地打印輸出的文件中,但該格式是相同的格式標準的R提示(由##之前,例如) ,這相當醜陋。

如何手動顯示錶格?

###編輯###

一些應答者已重定向我R knitr print in a loop爲重複的答案。 這不是,因爲正如我在前一段所述,這有效地打印了表格,但格式不是預期的格式。接受的答案(和相關的github線程)確實解決了這個問題。

+0

除了你在你的第二個到最後一段,'print'呼叫描述做的伎倆。我想你在嘗試這個時忘了設置'results =「asis」'。 –

+0

[R knitr print in a loop]的可能重複(http://stackoverflow.com/questions/28313600/r-knitr-print-in-a-loop) –

回答

5

這個問題在這裏解決:https://github.com/yihui/knitr/issues/886

所有你需要的是每個打印通話後換行

--- 
title: "project title" 
author: "Mr. Author" 
date: "2016-08-30" 
output: 
    pdf_document: 
    latex_engine: xelatex 
    bibliography: biblio.bib 
    header-includes: 
     - \usepackage{tcolorbox} 
--- 

Text and chunks that run ok. 

```{r loadLibraries} 
require(data.table) 
require(knitr) 
``` 

```{r results = "asis"} 
t1 <- data.table(a = sample(letters, 10, T), b = sample(LETTERS[1:3], 10, T)) 
t2 <- split(t1, t1$b) 

for (i in 1:length(t2)){ 
    print(kable(t2[[i]], col.names = c("A", "B"))) 
    cat("\n") 
} 
``` 
+1

2014年我不瞭解情況,但如今,貓不是必需的。這只是代碼中缺少的'print'語句。 –