【问题标题】:Parameterization of Rmarkdown FilesRmarkdown 文件的参数化
【发布时间】:2019-07-30 16:08:33
【问题描述】:

我正在尝试遍历员工 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

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

【问题讨论】:

  • !r 标头中的命令在执行其他任何操作之前运行。由于uniqueID 不是内置的R 对象,它会导致错误。您应该在 YAML 标头中放置一个默认值,然后通过 render() 将特定值作为 here 传递。
  • 所以我只是更改了代码以在默认值为 1 的情况下执行此操作,并且在渲染命令中我使用 render('Report.Rmd',params = list(MASTER_ID=unique(Salary$MASTER_ID))) 仍然收到 YAML 错误
  • 您应该一次传递一个值而不是值向量。
  • 好的,如果我想处理一个值向量,我会为向量的每个值使用 for 循环?
  • 是的。没错。

标签: r yaml r-markdown


【解决方案1】:

要跟进其他人已经说过的内容,最好使用 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`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多