Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing gt table inside a loop with rmarkdown::render not working

I am programming a report generator that export html. I use two files, the first is a loop that will determine the number of reports and within my .Rmd template I have another loop to print several tables.

The .Rmd below, works fine

    ---
title: "Report"
author: "Me"
date: "`r format(Sys.time(), '%d de %B de %Y')`"
output:
  html_document
---

# First Section


```{r , results='asis', echo=FALSE, message=FALSE}
library(tidyverse)
library(gt)

i=1

df <- cbind(m=c(rep(1,16),rep(2,16)),mtcars)

gears <- unique(df$gear)

for(g in gears)
{
  cat("## gear", g, "\n")
  
  print(
  df %>% filter(gear==g & m==i) %>%
    gt()
  )
}

The output enter image description here

but if call it from the external file with render the tables do not show

library(tidyverse)
library(gt)

df <- cbind(m=c(rep(1,16),rep(2,16)),mtcars)

for (i in 1:2) 
{

  rmarkdown::render(
    'report_template_2.Rmd', output_file = paste0("report", 
                                                    "_",i, 
                                                  '.html'), encoding="UTF-8")
}

enter image description here

like image 619
jcarlos Avatar asked Mar 26 '21 07:03

jcarlos


1 Answers

The usual htmltools::tagList trick seems to work.
Didn't dig into render internals to try to understand why it behaves differently than manual knit.

---
title: "Report"
author: "Me"
date: "`r format(Sys.time(), '%d de %B de %Y')`"
output:
  html_document
---

# First Section

```{r,eval=F,echo=F}
gt(mtcars)
```


```{r , results='asis', echo=FALSE, message=FALSE}
library(tidyverse)
library(gt)

i=1

df <- cbind(m=c(rep(1,16),rep(2,16)),mtcars)

gears <- unique(df$gear)

l <- list()
i<-1
for(g in gears)
{
  cat("## gear", g, "\n")
  
  print(htmltools::tagList(df %>% filter(gear==g & m==i) %>% gt()))

}

enter image description here

like image 118
Waldi Avatar answered Nov 06 '22 05:11

Waldi