PavoDive PavoDive - 2 months ago 50
LaTeX Question

R: why kable doesn't print inside a for loop?

I'm working a report with rmarkdown and latex. I need to print a group of tables using

knitr::kable
, but the don't print when inside a for loop.

This is my code:

---
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"))
}
```


It doesn't matter if I use
results = "asis"
or if I omit it altogether, nothing prints to the document.

I've tried enclosing the
kable
call within a
print
call (
print(kable(t2[[i]]...
), and it successfully prints the output to the document, but the format is the same format as a standard R prompt (preceded by
##
, for example), which is rather ugly.

How can I display the tables, other than manually?

Answer

This question is addressed here: https://github.com/yihui/knitr/issues/886

All you need is a line break after each print call

---
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")
}
```
Comments