Tom
Tom

Reputation: 2341

Printing flextables from a list of lists in R-markdown

I have example data as follows:

library(data.table)
library(flextable)
datA <- fread("anyvar somevar
               2  4
               2  3
               2  5")

dat_list <- list("one" = list("datA" = datA, "datB" = 2*datA),"two" = list("datC" = 3*datA, "datD" = 4*datA), "three" = list("datE" = 5*datA, "datF" = 6*datA))

for (i in seq_along(dat_list) ) {
  for (j in seq_along( dat_list[[i]] ) ) {
    dat_list[[i]][[j]] <- flextable( dat_list[[i]][[j]] )
  }
}

I want to print out part of this list in R-markdown. In R I can just use the print function in a for loop:

 for (j in seq_along(dat_list[[2]])) {
    print(dat_list[[2]][[j]])
 }

However in R-markdown I cannot. I tried using print and return, but it is not giving me the right output (print does not print a flextable, and return, returns only the first table). How should I do this? :

---
output: word_document
---

My example data:

```{r}

library(data.table)
library(flextable)
datA <- fread("anyvar somevar
               2  4
               2  3
               2  5")

dat_list <- list("one" = list("datA" = datA, "datB" = 2*datA),"two" = list("datC" = 3*datA, "datD" = 4*datA), "three" = list("datE" = 5*datA, "datF" = 6*datA))


for (i in seq_along(dat_list) ) {
  for (j in seq_along( dat_list[[i]] ) ) {
    dat_list[[i]][[j]] <- flextable( dat_list[[i]][[j]] )
  }
}

```

Print function

```{r, echo=FALSE}

 for (j in seq_along(dat_list[[2]])) {
    print(dat_list[[2]][[j]])
    cat("\n\newpage\n")
 }
```

Return function

```{r, echo=FALSE}

 for (j in seq_along(dat_list[[2]])) {
    return(dat_list[[2]][[j]])
    cat("\n\newpage\n")
 }
```

Upvotes: 3

Views: 447

Answers (1)

stefan
stefan

Reputation: 124048

Based on this answer you could use knitr::knit_print and add results='asis' to the chunk options. Also note that we have to use \\newpage to add the page break.

---
output: word_document
---

```{r echo=FALSE}
library(data.table)
library(flextable)
datA <- fread("anyvar somevar
               2  4
               2  3
               2  5")

dat_list <- list("one" = list("datA" = datA, "datB" = 2 * datA), "two" = list("datC" = 3 * datA, "datD" = 4 * datA), "three" = list("datE" = 5 * datA, "datF" = 6 * datA))


for (i in seq_along(dat_list)) {
  for (j in seq_along(dat_list[[i]])) {
    dat_list[[i]][[j]] <- flextable(dat_list[[i]][[j]])
  }
}
```

```{r, echo=FALSE, results='asis'}
for (j in seq_along(dat_list[[2]])) {
  cat(knitr::knit_print(dat_list[[2]][[j]]))
  cat("\n\\newpage\n")
}
```

enter image description here

Upvotes: 2

Related Questions