21

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

我的过程是这样的:

  1. 首先 RStudio 准备要显示的数据,保存在 X.Rda 中。
  2. 在 X.Rnw (RStudio) 中,我阅读 X.Rda,选择一个城市,然后生成表格和绘图。
  3. 在 RStudio 中,我按“编译 PDF”并生成城市报告 X.pdf。
  4. 我转到第 2 步,选择另一个城市,依此类推。

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

感谢 r 贡献者!

/克里斯

4

2 回答 2

27

您可以使用诸如带有全局变量更改的循环之类的东西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(这是题外话,所以我不会在这里展开)。

于 2011-12-15T17:18:18.363 回答
0
  • 在 R 环境中执行此操作。
  • 将特定城市的所有输出放在一个列表中
  • 用块写你的 RnW 只是调用输出
  • 将您的 R 图像保存在与 Sweave 报告相同的文件夹中,并将 wd 设置为相同的文件夹
  • Sweave("yourfile.RnW", output = "yourcity.tex")
  • 使用 texi2dvi 从 R 编译你的 tex 文件

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

于 2014-02-12T09:19:31.837 回答