2011-12-15 87 views
20

我分析了很多城市(数百个城市)的测量数据,并且需要为每个城市创建单独的报告(采用Adobe pdf格式)。Sweave能自动生成很多pdf吗?

我的过程是这样的:

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

这是非常乏味的,并且看起来非常适合每个城市的for-loop,但是怎么做呢?

谢谢你的贡献者!

/克里斯

+4

这可以用brew`的'组合来实现和`sweave`。看看这个例子在这里http://stackoverflow.com/questions/8434371/run-sweave-or-knitr-with-objects-from-existing-r-session/8437769#8437769。或者,你可以编写一个读取“城市”并将doc编译为pdf的函数,并通过城市循环。 – Ramnath 2011-12-15 12:38:39

回答

27

您可以使用像一个for循环使用全局变量变化,要织成的报告,其中城市控制;看到其他交Run Sweave or knitr with objects from existing R session

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

0
  • 在R environnent中做到这一点。
  • 将全部用于特定城市的输出列表中的
  • 写您的RNW与大块刚刚召唤输出
  • 在同一个文件夹中保存R图像作为Sweave报告并设置WD此相同的文件夹
  • Sweave(“yourfile.RnW”,output =“yourcity。TEX“)
  • 使用TEXI2DVI于从R
  • 编译tex的文件

如果你有很多城市,你应该将其写入功能。