R:为什么kable不能在for循环中打印?

时间:2016-09-22 23:05:59

标签: r latex knitr

我正在用rmarkdown和latex工作。我需要使用knitr::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"或者我完全省略它,没有打印到文档,则无关紧要。

我已尝试在kable调用(print)中附加print(kable(t2[[i]]...调用,并成功将输出打印到文档,但格式与a {标准的R提示符(例如前面有##),这是相当丑陋的。

如何手动显示表格?

###编辑###

有些回答者已将我重定向到R knitr print in a loop作为重复答案。 它不是,因为正如我在前一段中所述,这有效地打印了表格,但格式不是预期的。接受的答案(以及相关的github线程)确实解决了这个问题。

1 个答案:

答案 0 :(得分:10)

这个问题在这里得到解决: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")
}
```