r语言 - 可以Sweave自动产生许多pdf文件



我分析了许多城市(数百个)的测量结果,并且需要为每个城市创建单独的报告(Adobe pdf格式)。

我的过程是这样的:

  1. 第一个RStudio准备要显示的数据,保存在X.Rda.
  2. 在X.Rnw (RStudio)中,我读取X.Rda,选择一个城市,并生成表格和图。
  3. 在RStudio中,我按下"编译PDF",生成了city-report x.f PDF。我转到步骤2,选择另一个城市,等等。

这非常乏味,看起来很适合每个城市的for循环,但是如何实现呢?

感谢贡献者!

Chris

您可以使用具有全局变量变化的for循环之类的东西,它控制您想要编织到报告中的城市;查看其他帖子运行Sweave或knitr与现有的R会话对象

代码将是这样的(假设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(这是离题的,所以我不会在这里展开)。

  • 在R环境中执行。
  • 将特定城市的所有输出放在列表中
  • 写你的RnW块只调用输出
  • 将R图像保存在与Sweave报告相同的文件夹中,并将wd设置为相同的文件夹
  • Sweave("yourfile。RnW", output = "yourcity.tex")
  • 使用texi2dvi从R编译你的tex文件

如果你有很多城市,你应该把它们放到一个函数中。

最新更新