首页 > 解决方案 > Rmarkdown 文件的参数化

问题描述

我正在尝试遍历员工 ID 列表,为每个 ID 创建一个报告。

我知道我必须在 YAML 中声明参数,但我遇到了扫描仪错误。

---
title: "Employee Record"
params:
  MASTER_ID: !r uniqueID
output: pdf_document
---
**Employee ID:** `r params$MASTER_ID`

数据集中的员工 ID 字段称为 MASTER_ID,uniqueID 只是每个唯一员工 ID 的列表(长度 = 880)

我得到的错误是:

Error in yaml::yaml.load(string, ...) : 
  Scanner error: while scanning a simple key at line 3, column 1 could not find expected ':' at line 4, column 1

我没有任何额外的空格或任何东西,所以我不确定我错过了什么

标签: ryamlr-markdown

解决方案


要跟进其他人已经说过的内容,最好使用该rmarkdown::render函数从单独的 R 文件中调用您的 Rmd。这也使您可以轻松控制文件命名和输出位置。

employees <- 1:10

for (i in employees) {
  rmarkdown::render("test_pdf.Rmd",
                    params = list(MASTER_ID = i),
                    output_file = paste0('employee-', i, ".pdf"),
                    output_dir = '/reports')
}

包含test_pdf.Rmd

title: "Employee Record"
params:
  MASTER_ID: 
    value: 1
output: pdf_document
---
**Employee ID:** `r params$MASTER_ID`

推荐阅读