2011-12-15 20 views
20

Analizuję pomiary z wielu miast (setki) i muszę utworzyć oddzielne raporty dla każdego miasta (w formacie Adobe pdf).Czy Sweave może automatycznie generować wiele plików PDF?

mój proces jest tak:

  1. Pierwszy RStudio przygotować dane mają być wyświetlane, zapisane w X.Rda.
  2. W X.Rnw (RStudio) czytam X.Rda, wybieram jedno miasto i tworzę tabele i wykresy.
  3. W RStudio naciskaję przycisk "Kompiluj PDF" i generowany jest raport miejski X.pdf.
  4. Przechodzę do kroku 2, wybieram inne miasto i tak dalej.

Jest to bardzo żmudne i wygląda idealnie na pętlę for na miasto, ale jak to zrobić?

Dziękuję r-contributors!

/Chris

+4

Można to zrobić za pomocą kombinacji i' brew' 'Sweave'. Spójrz na ten przykład tutaj http://stackoverflow.com/questions/8434371/run-sweave-lub-knitr-with-objects-from-ex-reisting-r-session/8437769#8437769. może napisać funkcję, która czyta "miasto" i kompiluje dokument do pdf, i przegląda miasta.) – Ramnath

+2

Trzeba trochę rozszerzyć .Jak wybrać .Rnw wybrać miasto? Jaki system operacyjny używasz (ponieważ może to być łatwo skrypty w Linuksie)? Lub możesz użyć funkcji Sweave (plik) w R, ale musimy wiedzieć, jak zrobić .Rnw używać określonego zestawu danych. Być może trzeba użyć "naparu", aby utworzyć określony .Rnw z szablonu. A następnie kolejnym krokiem jest zrobienie pliku PDF -? Sweave sugeruje texi2dvi z pakietu narzędzi ... – Spacedman

Odpowiedz

27

Można użyć coś jak for pętli o zmiennej globalnej zmiany, które kontroluje miasto, które chcesz wpleść w raporcie; zobacz inne stanowisko Run Sweave or knitr with objects from existing R session

Kod będzie jak (załóżmy cities jest wektorem charakter i używam pakiet knitr jako przykład, ponieważ można określić nazwę pliku wyjściowego):

for (city in cities) { 
    knit('city_template.Rnw', output = paste('report_', city, '.tex', sep = '')) 
} 

Inside city_template.Rnw, masz kawałek jak

<<do-my-job>>= 
make_plot(city, ...) 
whatever(city, ...) 
@ 

Następnie otrzymasz serię plików tex nazwanych przez miasta, a reszta twojej pracy jest skompilować je do formatu PDF (nie możliwe do RStudio kompilować wiele plików tex, AFAIK, ale jest to proste, aby zrobić to w linii poleceń lub w R z texi2dvi()).

Jest jedna rzecz, którą należy zachować ostrożność - do każdego pliku wyjściowego należy użyć prefiksu innej postaci (opcja fig.path), w przeciwnym razie różne miasta mogą przesłonić swoje dane wyjściowe. W knitr, można to zrobić przez tak:

<<setup, echo=FALSE>>= 
opts_chunk$set(fig.path = paste('my-prefix-', city, sep = '')) 
@ 

Wierzę, że to powinno być bezpieczne do produkcji wielu raportów z pętli.

Przy okazji, na pewno można osiągnąć ten sam cel za pomocą Sweave; być może dowiesz się, dlaczego później rozwinąłem knitr (jest to poza tematem, więc nie będę tutaj rozbudowywał).

0
  • Zrób to w R environnent.
  • umieścić wszystkie wyjścia dla konkretnego miasta na liście
  • Napisz swoją RNW z kawałkami tylko powołaniach wyjść
  • Zapisz R obraz w tym samym folderze co raporcie Sweave i zestaw wd do tego samego folderu
  • Sweave ("yourfile.RnW", output = "yourcity.tex ")
  • Zastosowanie texi2dvi skompilować plik tex z R

Jeśli masz wiele miast, które należy umieścić w funkcji.

Powiązane problemy