在 rmarkdown 中打印存储在列表中的任意数量的数据帧作为分页表
Printing any number of dataframes stored in list as paged tables in rmarkdown
我经常想在我的 rmarkdown 文档中打印出列表中包含的数据帧作为分页表。如果选择了正确的 df_print
选项,则单独调用每个数据帧会呈现所需的输出。但是,有一个列表的要点是数据帧的数量会根据传递给 rmarkdown 文档的参数而变化;所以这不是真正的解决方案。
基于 rmarkdown::paged_table
的 Vincent Guyader's answer to this question and on this example,我尝试执行以下操作但没有成功。
有什么办法可以做到这一点吗?我很乐意使用任何支持远程分页的包,类似于 df_print
选项。
---
title: "Printing paged tables from a list of dataframes in Rmarkdown"
output:
html_document:
df_print: paged
---
```{r}
library(DT)
library(rmarkdown)
library(purrr)
library(knitr)
df_list <- list("cars" = mtcars, "flowers" = iris)
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE, results='asis')
```
### Desired output but impossible to generalise
```{r}
df_list[["cars"]]
```
```{r}
df_list[["flowers"]]
```
### datatable shows as blanks on the page
```{r}
map(df_list, ~DT::datatable(.x) %>%
htmltools::tagList() %>%
print())
```
### rmarkdown outputs dataframe contents as one very long string
```{r}
map(df_list, rmarkdown::paged_table)
```
问题是呈现数据表所需的 JS 依赖项未包含在 HTML 输出中。我从 here 那里借用的一个解决方法是添加一个代码块
```{r init-step, include=FALSE}
DT::datatable(mtcars)
```
在循环或映射语句之外,确保包含 JS 依赖项。另外,我建议切换到 purrr::walk
,因为使用 map
会导致表格被绘制两次。
---
title: "Printing paged tables from a list of dataframes in Rmarkdown"
output:
html_document:
df_print: paged
---
```{r}
library(DT)
library(rmarkdown)
library(purrr)
library(knitr)
df_list <- list("cars" = mtcars, "flowers" = iris)
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE, results='asis')
```
### Desired output but impossible to generalise
```{r}
df_list[["cars"]]
```
```{r}
df_list[["flowers"]]
```
### datatable shows as blanks on the page
```{r init-step, include=FALSE}
DT::datatable(mtcars)
```
```{r}
walk(df_list, ~DT::datatable(.x) %>%
htmltools::tagList() %>%
print())
```
当使用 results='asis'
参数时,渲染器(此处为 DT)在应用于 asis
列表之前必须初始化一次。
这似乎是一个普遍的问题,参见 , and .
已给出此一般性问题的答案 。
在这种情况下:
---
title: "Printing paged tables from a list of dataframes in Rmarkdown"
output:
html_document:
df_print: paged
---
```{r,}
library(DT)
library(rmarkdown)
library(purrr)
library(knitr)
df_list <- list("cars" = mtcars, "flowers" = iris)
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE, results='asis')
# initialize the renderer
data.frame() %>%
DT::datatable() %>%
knitr::knit_print() %>%
attr('knit_meta') %>%
knitr::knit_meta_add() %>%
invisible()
```
```{r , results='asis'}
#Remove already printed element and print the rest
df_list[[1]] <- NULL
map(df_list, ~DT::datatable(.x) %>%
htmltools::tagList() %>%
print())
```
我经常想在我的 rmarkdown 文档中打印出列表中包含的数据帧作为分页表。如果选择了正确的 df_print
选项,则单独调用每个数据帧会呈现所需的输出。但是,有一个列表的要点是数据帧的数量会根据传递给 rmarkdown 文档的参数而变化;所以这不是真正的解决方案。
基于 rmarkdown::paged_table
的 Vincent Guyader's answer to this question and on this example,我尝试执行以下操作但没有成功。
有什么办法可以做到这一点吗?我很乐意使用任何支持远程分页的包,类似于 df_print
选项。
---
title: "Printing paged tables from a list of dataframes in Rmarkdown"
output:
html_document:
df_print: paged
---
```{r}
library(DT)
library(rmarkdown)
library(purrr)
library(knitr)
df_list <- list("cars" = mtcars, "flowers" = iris)
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE, results='asis')
```
### Desired output but impossible to generalise
```{r}
df_list[["cars"]]
```
```{r}
df_list[["flowers"]]
```
### datatable shows as blanks on the page
```{r}
map(df_list, ~DT::datatable(.x) %>%
htmltools::tagList() %>%
print())
```
### rmarkdown outputs dataframe contents as one very long string
```{r}
map(df_list, rmarkdown::paged_table)
```
问题是呈现数据表所需的 JS 依赖项未包含在 HTML 输出中。我从 here 那里借用的一个解决方法是添加一个代码块
```{r init-step, include=FALSE}
DT::datatable(mtcars)
```
在循环或映射语句之外,确保包含 JS 依赖项。另外,我建议切换到 purrr::walk
,因为使用 map
会导致表格被绘制两次。
---
title: "Printing paged tables from a list of dataframes in Rmarkdown"
output:
html_document:
df_print: paged
---
```{r}
library(DT)
library(rmarkdown)
library(purrr)
library(knitr)
df_list <- list("cars" = mtcars, "flowers" = iris)
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE, results='asis')
```
### Desired output but impossible to generalise
```{r}
df_list[["cars"]]
```
```{r}
df_list[["flowers"]]
```
### datatable shows as blanks on the page
```{r init-step, include=FALSE}
DT::datatable(mtcars)
```
```{r}
walk(df_list, ~DT::datatable(.x) %>%
htmltools::tagList() %>%
print())
```
当使用 results='asis'
参数时,渲染器(此处为 DT)在应用于 asis
列表之前必须初始化一次。
这似乎是一个普遍的问题,参见
已给出此一般性问题的答案
在这种情况下:
---
title: "Printing paged tables from a list of dataframes in Rmarkdown"
output:
html_document:
df_print: paged
---
```{r,}
library(DT)
library(rmarkdown)
library(purrr)
library(knitr)
df_list <- list("cars" = mtcars, "flowers" = iris)
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE, results='asis')
# initialize the renderer
data.frame() %>%
DT::datatable() %>%
knitr::knit_print() %>%
attr('knit_meta') %>%
knitr::knit_meta_add() %>%
invisible()
```
```{r , results='asis'}
#Remove already printed element and print the rest
df_list[[1]] <- NULL
map(df_list, ~DT::datatable(.x) %>%
htmltools::tagList() %>%
print())
```