簡體   English   中英

如何在 r-markdown 中一次制作多個針織物?

[英]How to make multiple knits at once in r-markdown?

我仍在尋找您可以提供的任何幫助:)

我正在制作一個充滿不同工作統計數據的單頁紙。 我有 70 份不同的工作,這意味着我需要制作 70 份單頁紙。 我如何自動化降價以一次制作所有 70 個?

我制作了一個簡化的降價版本,只有兩個基本圖。 我怎樣才能做到這一點,以便在我的示例中有 3 個作業時,當我編織時,我會在每個 onepager 上獲得 3 個具有正確統計信息的 onepager,並將它們保存到“C:/Users/Desktop/Onepagers/”,並將作業作為 pdf 名稱。 例如:Analyst.pdf、Doctor.pdf 和 Pilot.pdf

表 1 上的第一個 DF 是:

Job     GENDER     PEOPLE
Analyst   M         500
Analyst   F         1000
Doctor    M         2500
Doctor    F         2000
Pilot     M         50
Pilot     F         10

表 2 上的第二個 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 個文件!

您有兩個不同的數據集。 在您的帖子中,一個有Job 另一個有JOB 我將它們都更改為JOB 在您的帖子中,職位名稱的記錄方式相同。 例如-

分析師=分析師≠分析師≠分析師

如果這總是正確的,這將起作用。 如果它並不總是正確的,它仍然可以完成,但它需要修改。

您將創建一個 RMD模板和一個使用該模板的 R 腳本。 我建議您首先為一個工作領域創建一個 RMD。 完全按照您希望所有文件的外觀對其進行格式化。 然后將文件修改為模板(或復制它)。 一旦它是模板,您將無法在沒有 R 文件的情況下編織 RMD 文件。

YAML 有一個基於職位的標題,但這只是因為您已經表明這是需要的。 但是, call 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM