使用循环在Markdown中参数化作者和标题

时间:2018-05-01 11:07:21

标签: r r-markdown

我需要参数化Markdown报告的标题和作者。 我可以设置标题并从我的数据集子集的循环生成报告,但我无法弄清楚如何将标题与我在我的数据集中的相应作者匹配。

例如,我有一套由不同教师讲授的课程。我可以将该课程的标题作为降价报告的标题:

for (c in unique((na.omit(data$NAME_OF_THE_COURSE)))){
 rmarkdown::render('LOCATION_WHATEVER',
                   params = list(set_title= c),
                   output_file =  paste("report_post_", c, '_', Sys.Date(), ".html", sep=''), 
                   output_dir = 'LOCATION_WHATEVER')
}

但我无法设置作者,因为我需要另一个循环

for (author in unique((na.omit(data$NAME_OF_INSTRUCTUR)))) 

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

我几乎总是避免使用循环,因为R的一个优点是你可以work over vectors。相反,我会使用基础R中的apply家庭功能,或者我的偏好,使用来自map / purrr的{​​{1}}家庭功能。

你可以通过几种方式实现这一目标,但我选择了嵌套列表。它是课程信息列表,每个课程都是教授姓名和班级名称的列表。使用tidyverse,您可以映射外部列表,从每个类中获取名称,并将其用作walk的参数。

这里是虚拟的Rmarkdown,文件名为dummy_rmd.Rmd:

修改:您可以在yaml中使用内联R代码来设置文档的标题和作者,如in this answer所述。包含内联代码的项目需要 render之后的,因此已经定义了一些内容。

params

然后在同一目录的脚本中:

---
output: html_document
params:
  prof: "Person 1"
  class: "Class A"
title: "`r params$class`"
author: "`r params$prof`"
---

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

```{r}
prof <- params$prof
class <- params$class

plot(1:5, runif(5), main = sprintf("Plot for %s taught by %s", class, prof))
```

这给了我html文件,每个课程一个,相应地命名。 HTML输出如下:

enter image description here