Использование нескольких параметров в полях RMarkdown YAML - PullRequest
1 голос
/ 13 февраля 2020

Предположим, у меня df в качестве моего кадра данных.

df <- data.frame(title = c("Hello there", "Good morning", "Good afternoon", "Good evening"),
                 date = c("4 Jan 2019", "6 Jan 2019", "10 Jan 2019", "14 Jan 2019"))

Я хотел бы использовать параметры для воспроизведения отчетов для каждой даты, и на yaml есть и заголовок, и дата.

Мой template.Rmd

---
output: 
  html_document:
    keep_md: true
params:
  title: "Hello there"
  date: "4 Jan 2019"
title: "`r params$title`"
date: "`r params$date`"
---

On `r params$date`, she said `r params$title`. 

Мой R скрипт для воспроизведения:

library(stringr)
library(tidyverse)

title <- df$title

reports <- tibble(
    filename = str_c(title, ".html"),
    params = map(title, ~list(title = .))
)

reports %>%
    select(output_file = filename, params) %>%
    pwalk(rmarkdown::render, input = "template.Rmd", output_dir = "output")

Спасибо.

1 Ответ

1 голос
/ 13 февраля 2020

Файл template.Rmd:

---
title: "`r params$title`"
date: "`r params$date`"
params:
  title: no # default
  date: no  # default
author: "Darren Tsai"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

On `r params$date`, she said `r params$title`.

R скрипт:

library(tidyverse)
df <- data.frame(title = c("Hello there", "Good morning", "Good afternoon", "Good evening"),
                 date = c("4 Jan 2019", "6 Jan 2019", "10 Jan 2019", "14 Jan 2019"))

df2 <- df %>%
  mutate(filename = str_c(title, ".html"))

df2

#            title        date            filename
# 1    Hello there  4 Jan 2019    Hello there.html
# 2   Good morning  6 Jan 2019   Good morning.html
# 3 Good afternoon 10 Jan 2019 Good afternoon.html
# 4   Good evening 14 Jan 2019   Good evening.html

df2 %>%
  pwalk(~ rmarkdown::render("template.Rmd", output_file = ..3,
                            params = list(title = ..1, date = ..2)))

..1, ..2 и ..3 представляют заголовок, дату, и имя файла в df2.

Примечание: То, что вы задали в аргументе params из render() должно быть объявлено в YAML, поэтому в моем Rmd-файле я устанавливаю значения по умолчанию no в title и date в params.


Проверьте четыре HTML файл:

enter image description here

...