我需要参数化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))))
有什么建议吗?
答案 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输出如下: