您可以使用诸如带有全局变量更改的循环之类的东西for
,它可以控制要编织到报告中的城市;请参阅其他帖子使用现有 R 会话中的对象运行 Sweave 或 knitr
代码将是这样的(假设cities
是一个字符向量,我以knitr
包为例,因为你可以指定输出的文件名):
for (city in cities) {
knit('city_template.Rnw', output = paste('report_', city, '.tex', sep = ''))
}
在里面city_template.Rnw
,你有一个像
<<do-my-job>>=
make_plot(city, ...)
whatever(city, ...)
@
然后你会得到一系列由城市命名的tex文件,剩下的工作就是将它们编译成PDF(RStudio不可能编译多个tex文件,AFAIK,但在命令行或在 R 中,带有texi2dvi()
)。
您需要注意一件事——您必须fig.path
为每个输出文件使用不同的数字前缀(选项),否则不同的城市可以覆盖彼此的数字输出。在knitr
中,这可以通过以下方式完成:
<<setup, echo=FALSE>>=
opts_chunk$set(fig.path = paste('my-prefix-', city, sep = ''))
@
我相信这应该可以安全地生成许多带有循环的报告。
顺便说一句,您当然可以使用 Sweave 实现相同的目标;也许你会知道我后来为什么开发knitr
(这是题外话,所以我不会在这里展开)。