我用knitr做了类似你建议的事情,效果很好。
不要告诉任何人,但我使用“for”循环来循环通过一堆委员会,每个委员会都会得到相同的报告,但包含他们的数据。然后,我将报告放入目录结构中,压缩并邮寄。
我有一个 Rmd 文件,需要两个数据集,setA(作为主题)和 setB(作为其对等体)
流程是这样的:
set <- assemble_data() # loads whole set
for (report in report_list) {
setA <- filter(set, subject == report)
setB <- filter(set, subject != report)
output_html <- str_c('path/',report,'.html')
knit_interim <- str_c('path/',report,'md')
knit_pattern <- 'name of RMd' # I generate more than one report for each place
knit(knit_pattern)
markdowntoHTML(file = knit_interim, output=output_html, stylesheet=stylesheet, encoding='windows-1252')
}
这样我就可以在几分钟内生成一份报告集。我的情况可能比您的情况更简单,因为报告结构是相同的 - 改变的是数据集。
请注意,这不是代码的粘贴(它比这稍微复杂一些),所以要小心拼写错误等。
要点(据我理解)是编写一个需要特定名称的数据集的 Rmd,并且 R 代码为其提供本地范围。最初我很挣扎,但执行起来非常简单。
[更新:“如何将数据传递到 RMd 文件?”
您并不明确需要这样做。在我上面的代码中,RMd 被写入期望 setA 和 setB 中的数据。
它使工作流程变得非常简单 - 您使用数据集编写模板(手动过滤一个),然后当您准备好时,您可以运行循环。就像我说的,一开始我有点难以理解,但很快就投入其中,一切都很顺利。