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?
### EDIT ###
Some answerers have redirected me to R knitr print in a loop as a duplicate answer. It's not, because as I stated in the previous paragraph, this effectively prints the table, but the format is not the expected one. The accepted answer (and related github thread) really solved the problem.
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")
}
```
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With