提取列表中的数据框并以pdf格式打印

时间:2018-04-04 11:04:12

标签: r loops pdf-generation

我有一个n数据框列表。我们打电话给列表Y。 它看起来像这样:

$Profession1
Searchterm         Product            Quantity
internist          Der Internist      3
pneumo news        Pneumo News        1
der urologe        Der Urologe        5    


$Profession2
Searchterm         Product            Quantity
der nervenarzt     Der Internist      7
der kardiologe     Der Kardiologe     2
.piefel            Strahlentherapie   6
therapiedes zenker Pathophysiologie   1

.
.
.
.
.
.

$Profession(n)
Searchterm         Product            Quantity
tuberkolose        Tuberkolose        2
und notfallmedizin Notfall            3
rechtsmedizin      Rechtsmedizin      9

现在,我想在pdf文件的新页面上打印每个数据框。每个数据框中的记录或行数不同。我想我应首先遍历每个数据帧,然后将其循环遍历列表中数据框中的每一行,但我不知道如何操作。

感谢。

2 个答案:

答案 0 :(得分:1)

首先,在R中,您不需要迭代给定表中的行。打印一个表应该打印它的全部内容 - 一些数据帧结构(tibble,data.table)将打印出前几行除非你修改一些参数进行打印,但你当然不需要迭代行

以下是我在Rmarkdown中的表现方式。

确保您在降价标题中选择了数据框打印选项:

---
title: "My Title"
author: "Me"
date: "`r format(Sys.time(), '%Y-%m-%d')`"
output:
    pdf_document:
        df_print: kable
---

导入这些以供日后使用

```{r}
library(purrr)
library(knitr)
```

设置数据

```{r}
# set up my_tables
```

为列表中的每个数据框创建打印数据框的文本表示

```{r}
out <- purrr::map_chr(
    my_tables,
    function(tt){
        knit_expand(text = "{{tt}}")
        }
    )
```

打印出数据框集合

`r paste(knit(out), collapse = "\n")`

如果你想在R本身内部工作,可以多次调用grid :: grid.table将表格打印成pdf:

library(grid)
pdf("my_file.pdf")
for(tt in my_tables){
  grid.table(tt)
  }
dev.off()

答案 1 :(得分:0)

这是一个非RMarkdown解决方案:

首先,我使用R`中的iris数据集制作了一个可重现的表格列表

tables <- list(a =  iris[1:10,], b = iris[11:20,], c = iris[21:30,])

使用gridgridExtra包,您可以将表创建为图形设备。 lapply用于为列表中的每个表运行grid.table(),所有这些都包含在函数pdf中,该函数将输出保存为PDF:

library(gridExtra)
library(grid)

pdf(file = "name_of_file.pdf")
lapply(tables, function(x){
  grid.newpage()
  grid.table(x)})
dev.off()

这会生成多页PDF文件:

enter image description here

  

进一步阅读:了解如何在此处设置网格图形样式:https://cran.r-project.org/web/packages/gridExtra/vignettes/tableGrob.html。您可以更改表格的颜色,格式等。