2011-12-15 38 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的文件

如果你有很多城市,你應該將其寫入功能。