如何在 r-markdown 中一次制作多件针织品?
How to make multiple knits at once in r-markdown?
我仍在寻找你能提供的任何帮助:)
我正在制作一个包含不同工作统计数据的单页纸。我有 70 个不同的工作,这意味着我需要制作 70 个单页纸。我怎样才能自动降价一次制作所有 70 个?
我做了一个简化的降价版本,只有两个基本情节。我怎样才能做到这一点,在我有 3 个工作的例子中,当我编织时,我得到 3 个单页,每个单页都有正确的统计数据,并将它们保存到“C:/Users/Desktop/Onepagers/”,工作作为 pdf 名称。例如:Analyst.pdf、Doctor.pdf 和 Pilot.pdf
sheet1 上的第一个 DF 是:
Job GENDER PEOPLE
Analyst M 500
Analyst F 1000
Doctor M 2500
Doctor F 2000
Pilot M 50
Pilot F 10
sheet2 上的第二个 DF 是:
JOB AGE PEOPLE
Analyst Under 30 400
Analyst 31-40 700
Analyst 41-50 300
Analyst Over 50 100
Doctor Under 30 500
Doctor 31-40 1500
Doctor 41-50 1500
Doctor Over 50 1000
Pilot Under 30 10
Pilot 31-40 25
Pilot 41-50 20
Pilot Over 50 5
---
title: "Name of job"
output: pdf_document
---
```{r setup, include=FALSE}
library(tidyverse)
library(readxl)
options(scipen = 100)
knitr::opts_chunk$set(echo = TRUE)
```
```{r, echo=FALSE, fig.width=4, fig.height=2.5}
GENDER <- read_xlsx("C:/Users/Desktop/TEST_MARKDOWN.xlsx", sheet=1)
GENDER <- filter(GENDER, JOB == "Analyst")
ggplot(GENDER,aes(y=GENDER, x=PEOPLE))+
geom_bar(stat = 'identity')+
theme_minimal()
```
```{r, echo=FALSE, fig.width=3.7, fig.height=2.5}
AGE <- read_xlsx("C:/Users/Desktop/TEST_MARKDOWN.xlsx", sheet=2)
AGE <- filter(AGE, JOB == "Analyst")
ggplot(AGE,aes(y=AGE, x=PEOPLE))+
geom_bar(stat = 'identity')+
theme_minimal()
```
有几个步骤可以实现这一点。不过,这比自己创建 70 个文件要少得多!
您有两个不同的数据集。在你的 post 中,有一个 Job
;另一个有JOB
。我把它们都改成了JOB
。在您的 post 中,职位名称的记录方式相同。例如——
Analyst = Analyst ≠ analyst ≠ ANALYST
如果这 总是 正确,这将起作用。如果它不总是正确的,它仍然可以完成,但它需要修改。
您将创建一个 RMD 模板 和一个使用该模板的 R 脚本。我建议您首先为一个工作领域创建一个 RMD。完全按照您喜欢的所有文件的外观对其进行格式化。然后将文件修改为模板(或复制)。一旦是模板,没有R文件就无法编织RMD文件
YAML 有一个基于职位的标题,但这只是因为您曾表示这是需要的。但是,调用 params:
具有非常具体的信息。您可以更改引号中的内容,但 params:
必须保持原样,并且您正在迭代的变量,如此处的 JOB
,必须完全按照它在数据中出现的方式编写。
---
title: "`r params$JOB`"
output: pdf_document
params:
JOB: ""
---
库和选项(无变化)
```{r setup, include=FALSE}
library(tidyverse)
library(readxl)
options(scipen = 100)
knitr::opts_chunk$set(echo = TRUE)
```
块的代码——注意特定作业的删除和内容 params$JOB
。这将来自 R 文件。
```{r p1, echo=FALSE, fig.width=4, fig.height=2.5}
GENDER <- read.table(header = T, text = "
JOB GENDER PEOPLE
Analyst M 500
Analyst F 1000
Doctor M 2500
Doctor F 2000
Pilot M 50
Pilot F 10")
# GENDER <- read_xlsx("C:/Users/Desktop/TEST_MARKDOWN.xlsx", sheet=1)
# GENDER <- filter(GENDER, JOB == "Analyst")
GENDER <- filter(GENDER, JOB == params$JOB)
ggplot(GENDER, aes(y = GENDER, x = PEOPLE)) +
geom_bar(stat = 'identity') +
theme_minimal()
```
```{r p2, echo=FALSE, fig.width=3.7, fig.height=2.5}
AGE <- read.table(header = T, text = "
JOB AGE PEOPLE
Analyst Under-30 400
Analyst 31-40 700
Analyst 41-50 300
Analyst Over-50 100
Doctor Under-30 500
Doctor 31-40 1500
Doctor 41-50 1500
Doctor Over-50 1000
Pilot Under-30 10
Pilot 31-40 25
Pilot 41-50 20
Pilot Over-50 5
")
# AGE <- read_xlsx("C:/Users/Desktop/TEST_MARKDOWN.xlsx", sheet=2)
# AGE <- filter(AGE, JOB == "Analyst")
AGE <- filter(AGE, JOB == params$JOB)
ggplot(AGE,aes(y = AGE, x = PEOPLE)) +
geom_bar(stat = 'identity') +
theme_minimal()
```
保存这个RMD文件,别费心编织了;它不会工作。记下此文件的名称和位置; R 文件需要它。
我的 RMD 被命名为 pdfGraphs.Rmd(我知道这是原创的)。我将 R 文件保存在与 RMD 相同的目录中(但这不是必需的)。但是,它们没有保存在当前工作目录中,所以我仍然需要路径。
R 文件的内容
library(tidyverse)
library(rmarkdown)
library(glue)
# only one of the two tables is needed here
### ASSUMING that the call for filtering is using the exact same values
#### for example, Analyst = Analyst ≠ analyst ≠ ANALYST
#### as long as it's the same word, same spelling, same capitalization
GENDER <- read.table(header = T, text = "
JOB GENDER PEOPLE
Analyst M 500
Analyst F 1000
Doctor M 2500
Doctor F 2000
Pilot M 50
Pilot F 10")
walk(.x = unique(GENDER$JOB),
~render(input = "./snippets/pdfGraphs.Rmd", # path via working directory
output_file = glue({.x}, ".pdf"), # file name is job; i.e., Analyst.pdf
params = list(JOB = {.x}))) # set's the param variable
现在当我 运行 这段代码时,它会创建一个名为 JOB 名称的 pdf,就像这样。
仅供参考,我通过删除库 epoxy
更新了此内容。不需要。 (感谢 GD)
我仍在寻找你能提供的任何帮助:)
我正在制作一个包含不同工作统计数据的单页纸。我有 70 个不同的工作,这意味着我需要制作 70 个单页纸。我怎样才能自动降价一次制作所有 70 个?
我做了一个简化的降价版本,只有两个基本情节。我怎样才能做到这一点,在我有 3 个工作的例子中,当我编织时,我得到 3 个单页,每个单页都有正确的统计数据,并将它们保存到“C:/Users/Desktop/Onepagers/”,工作作为 pdf 名称。例如:Analyst.pdf、Doctor.pdf 和 Pilot.pdf
sheet1 上的第一个 DF 是:
Job GENDER PEOPLE Analyst M 500 Analyst F 1000 Doctor M 2500 Doctor F 2000 Pilot M 50 Pilot F 10
sheet2 上的第二个 DF 是:
JOB AGE PEOPLE Analyst Under 30 400 Analyst 31-40 700 Analyst 41-50 300 Analyst Over 50 100 Doctor Under 30 500 Doctor 31-40 1500 Doctor 41-50 1500 Doctor Over 50 1000 Pilot Under 30 10 Pilot 31-40 25 Pilot 41-50 20 Pilot Over 50 5
---
title: "Name of job"
output: pdf_document
---
```{r setup, include=FALSE}
library(tidyverse)
library(readxl)
options(scipen = 100)
knitr::opts_chunk$set(echo = TRUE)
```
```{r, echo=FALSE, fig.width=4, fig.height=2.5}
GENDER <- read_xlsx("C:/Users/Desktop/TEST_MARKDOWN.xlsx", sheet=1)
GENDER <- filter(GENDER, JOB == "Analyst")
ggplot(GENDER,aes(y=GENDER, x=PEOPLE))+
geom_bar(stat = 'identity')+
theme_minimal()
```
```{r, echo=FALSE, fig.width=3.7, fig.height=2.5}
AGE <- read_xlsx("C:/Users/Desktop/TEST_MARKDOWN.xlsx", sheet=2)
AGE <- filter(AGE, JOB == "Analyst")
ggplot(AGE,aes(y=AGE, x=PEOPLE))+
geom_bar(stat = 'identity')+
theme_minimal()
```
有几个步骤可以实现这一点。不过,这比自己创建 70 个文件要少得多!
您有两个不同的数据集。在你的 post 中,有一个 Job
;另一个有JOB
。我把它们都改成了JOB
。在您的 post 中,职位名称的记录方式相同。例如——
Analyst = Analyst ≠ analyst ≠ ANALYST
如果这 总是 正确,这将起作用。如果它不总是正确的,它仍然可以完成,但它需要修改。
您将创建一个 RMD 模板 和一个使用该模板的 R 脚本。我建议您首先为一个工作领域创建一个 RMD。完全按照您喜欢的所有文件的外观对其进行格式化。然后将文件修改为模板(或复制)。一旦是模板,没有R文件就无法编织RMD文件
YAML 有一个基于职位的标题,但这只是因为您曾表示这是需要的。但是,调用 params:
具有非常具体的信息。您可以更改引号中的内容,但 params:
必须保持原样,并且您正在迭代的变量,如此处的 JOB
,必须完全按照它在数据中出现的方式编写。
---
title: "`r params$JOB`"
output: pdf_document
params:
JOB: ""
---
库和选项(无变化)
```{r setup, include=FALSE}
library(tidyverse)
library(readxl)
options(scipen = 100)
knitr::opts_chunk$set(echo = TRUE)
```
块的代码——注意特定作业的删除和内容 params$JOB
。这将来自 R 文件。
```{r p1, echo=FALSE, fig.width=4, fig.height=2.5}
GENDER <- read.table(header = T, text = "
JOB GENDER PEOPLE
Analyst M 500
Analyst F 1000
Doctor M 2500
Doctor F 2000
Pilot M 50
Pilot F 10")
# GENDER <- read_xlsx("C:/Users/Desktop/TEST_MARKDOWN.xlsx", sheet=1)
# GENDER <- filter(GENDER, JOB == "Analyst")
GENDER <- filter(GENDER, JOB == params$JOB)
ggplot(GENDER, aes(y = GENDER, x = PEOPLE)) +
geom_bar(stat = 'identity') +
theme_minimal()
```
```{r p2, echo=FALSE, fig.width=3.7, fig.height=2.5}
AGE <- read.table(header = T, text = "
JOB AGE PEOPLE
Analyst Under-30 400
Analyst 31-40 700
Analyst 41-50 300
Analyst Over-50 100
Doctor Under-30 500
Doctor 31-40 1500
Doctor 41-50 1500
Doctor Over-50 1000
Pilot Under-30 10
Pilot 31-40 25
Pilot 41-50 20
Pilot Over-50 5
")
# AGE <- read_xlsx("C:/Users/Desktop/TEST_MARKDOWN.xlsx", sheet=2)
# AGE <- filter(AGE, JOB == "Analyst")
AGE <- filter(AGE, JOB == params$JOB)
ggplot(AGE,aes(y = AGE, x = PEOPLE)) +
geom_bar(stat = 'identity') +
theme_minimal()
```
保存这个RMD文件,别费心编织了;它不会工作。记下此文件的名称和位置; R 文件需要它。
我的 RMD 被命名为 pdfGraphs.Rmd(我知道这是原创的)。我将 R 文件保存在与 RMD 相同的目录中(但这不是必需的)。但是,它们没有保存在当前工作目录中,所以我仍然需要路径。
R 文件的内容
library(tidyverse)
library(rmarkdown)
library(glue)
# only one of the two tables is needed here
### ASSUMING that the call for filtering is using the exact same values
#### for example, Analyst = Analyst ≠ analyst ≠ ANALYST
#### as long as it's the same word, same spelling, same capitalization
GENDER <- read.table(header = T, text = "
JOB GENDER PEOPLE
Analyst M 500
Analyst F 1000
Doctor M 2500
Doctor F 2000
Pilot M 50
Pilot F 10")
walk(.x = unique(GENDER$JOB),
~render(input = "./snippets/pdfGraphs.Rmd", # path via working directory
output_file = glue({.x}, ".pdf"), # file name is job; i.e., Analyst.pdf
params = list(JOB = {.x}))) # set's the param variable
现在当我 运行 这段代码时,它会创建一个名为 JOB 名称的 pdf,就像这样。
仅供参考,我通过删除库 epoxy
更新了此内容。不需要。 (感谢 GD)