在Rmarkdown中的多个PDF上运行不同的图形

在Rmarkdown中的多个PDF上运行不同的图形,r,pdf,r-markdown,R,Pdf,R Markdown,我想产生多个图形,并保存在多个pdf文件的基础上。这些图表根据特定类别而有所不同。使用此代码,它在生成1个pdf文件时工作 --- output: pdf_document --- ```{r setup, include=FALSE} i <- "30-40" ## Packages library(tidyverse) library(knitr) library(rmarkdown) library(tinytex) library(readxl) library(data

我想产生多个图形,并保存在多个pdf文件的基础上。这些图表根据特定类别而有所不同。使用此代码,它在生成1个pdf文件时工作

---
output: pdf_document
---

```{r setup, include=FALSE}  

i <- "30-40"

## Packages
library(tidyverse)
library(knitr)
library(rmarkdown)
library(tinytex)
library(readxl)
library(data.table)
library(lubridate)


# Create random data 
ID            <- sample(seq(from = 1, to = 20, by = 1),  100, replace = TRUE)
Date          <- sample(seq(ymd("2019-01-01"), today(), by="day"), 100, replace = TRUE)
Age           <- sample(c("20", "20-30", "30-40", "40-50", "50-60", "60-70", "70+"), 
                        size = 100, 
                        replace = TRUE, 
                        prob=c(0.05, 0.1, 0.075, 0.15, 0.2, 0.175, 0.25))
Duration_call <- sample(seq(from = 30, to = 600, by = 5),  100, replace = TRUE) 
Question      <- sample(c("Question1", "Question2", "Question3", "Question4"), 100, replace = TRUE)


sample_data <- tibble(ID, Date, Age, Duration_call, Question)



```

```{r}
KPI_3 <- sample_data %>%
       filter(Age == i) %>%

       mutate(Maand = lubridate::day(Date)) %>%
       group_by(Maand, Question) %>%
       summarize(Aantal_calls = n()) %>%

       ggplot(aes(Maand, Aantal_calls, group = Question, color = Question)) +
       geom_line()
```
---
输出:pdf\U文件
---
```{r设置,include=FALSE}

i如果我理解正确,您需要在markdown YAML文档中设置参数:

在本例中,它将从输出中获取生成的图像(例如图形)

---
title: "Title"
mainfont: Arial
output:
    pdf_document:
      latex_engine: xelatex
      fig_caption: false
      fig_height: 4
geometry: margin=.5in
params:
    images_params: !r list.files(path = "./images/", pattern = "\\.jpg$", full.names = TRUE)
    data: mtcars
---

在标记中,指定图像的位置

knitr::include_graphics(params$images_params) #calls on the param
并让另一个脚本运行它:

plotting_function <- function(df) {


  split_df <- split(df, df$Question)

  names <- names(split_df)

  plots <- map2(split_df, names, 
                ~ggplot(.x, aes(x = Age,
                                y = Duration_call)) +
                          geom_point()

  )

}

reports <- plotting_function(sample_data)


reports %>% pwalk(rmarkdown::render, 
                  input = "./path/Report.Rmd",
                  "pdf_document", envir = new.env())


plotting\u函数您不应该将in循环
i
作为一个函数传递吗?我怀疑在
.Rmd
文件中声明的
I
总是会覆盖在循环内环境中的内容。(旁注:Rmd依赖于未明确声明的变量(例如,在
设置
区块中)或通过
参数
传递的变量,这违反了范围,并使文档不易复制(如您现在所见)很难排除故障。建议:将其视为一个函数,只使用显式声明或传递给它的变量。)请查看此人的工作,它在同一文档中生成。这就是你要找的吗?@r2evans我确实需要使用rmarkdown参数。但是,通过计算摘要统计数据,它可以完美地工作,因此我想知道为什么在缩进不同的ggplot可视化时它不工作。如果我理解正确,您正在使用
knitr::include_graphics
缩进本地机器上已经生成(并保存)的图像。如果是这样的话,那就不是我想要的了。我需要循环(或映射)所有不同的类别,并为每个图生成一个图表(和pdf)。你的代码行得通吗?我需要做一些调整吗?提前谢谢。顺便说一下,你的方法似乎很有用!稍后我将在你的博客上阅读这个过程。要做到这一点,你可以跳过保存部分,在你的脚本中只需要生成绘图的代码,并让它在每个绘图中循环渲染(与保存到本地相同,但保留为对象)。我将更新顶部的部分,以显示它的外观。我将使用更新的代码再次尝试。提前谢谢!这并不能完全解决您的挑战,您需要使用参数设置,因为它不再拉动jpg。但本质上是一样的,只是将代码保存为对象,并将该列表提供给pwalk调用。
plotting_function <- function(df) {


  split_df <- split(df, df$Question)

  names <- names(split_df)

  plots <- map2(split_df, names, 
                ~ggplot(.x, aes(x = Age,
                                y = Duration_call)) +
                          geom_point()

  )

}

reports <- plotting_function(sample_data)


reports %>% pwalk(rmarkdown::render, 
                  input = "./path/Report.Rmd",
                  "pdf_document", envir = new.env())