【问题标题】:Using multiple params in RMarkdown YAML fields在 RMarkdown YAML 字段中使用多个参数
【发布时间】:2020-02-13 08:55:08
【问题描述】:

假设我有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")

谢谢。

【问题讨论】:

  • 如果我正确阅读了您的核心,您没有将params 传递给rmarkdown::render 函数。

标签: r r-markdown


【解决方案1】:

文件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 中的标题、日期文件名

注意:您在render() 的参数params 中设置的内容必须在YAML 中声明,因此在我的Rmd 文件中我将默认值no 设置为title 和@987654334 @下params


检查四个HTML文件:

【讨论】:

  • 这完全符合预期。我添加到rmarkdown::render 的唯一内容是output_dir = "output",以保持文件夹井井有条。
  • 我从样本数据移动到主数据集,在 50 个文件之后,我收到了这个错误:Error in yaml::yaml.load(..., eval.expr = TRUE) : Parser error: while parsing a block mapping at line 1, column 1 did not find expected key at line 1, column 49 我认为这可能是缺少数据条目,但我检查并没有找到缺失值。
  • @Kranja 对不起......我没有你的文件和数据集,所以我无法理解你的评论会发生什么。我认为这是与原始问题不同的问题,因此您可以将其作为新问题发布。
  • 缺少条目并且脚本没有像tryCatch 这样的错误处理选项。
猜你喜欢
  • 2014-11-20
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 2020-12-03
相关资源
最近更新 更多