Czy Sweave może automatycznie tworzyć wiele plików PDF?
Analizuję pomiary z wielu miast (setek) i muszę tworzyć oddzielne raporty dla każdego miasta (w formacie Adobe pdf).
Mój proces wygląda tak:
- Pierwsze RStudio do przygotowania danych do wyświetlenia, zapisane w X. Rda.
- W X. Rnw (RStudio) czytam X. Rda, wybieram jedno miasto i produkuję tabele i wykresy.
- W RStudio naciskam "Skompiluj PDF" i powstaje city-report X. pdf.
- przechodzę do kroku 2, wybieram inne miasto i tak on
To jest bardzo uciążliwe, i wygląda idealnie dla pętli for na miasto, ale jak to zrobić?
Thank you r-contributors!
/Chris
2 answers
Możesz użyć czegoś w rodzaju pętli for
ze zmieniającą się zmienną globalną, która kontroluje, które Miasto chcesz wpleść do raportu; zobacz inny post Uruchom Sweave lub knitr z obiektami z istniejącej sesji R
Kod będzie taki jak (Załóżmy, że cities
jest wektorem znaków, a ja używam knitr
pakiet jako przykład, ponieważ możesz podać nazwę pliku wyjścia):
for (city in cities) {
knit('city_template.Rnw', output = paste('report_', city, '.tex', sep = ''))
}
Wewnątrz city_template.Rnw
, masz kawałek jak
<<do-my-job>>=
make_plot(city, ...)
whatever(city, ...)
@
Wtedy ty otrzymasz serię plików tex nazwanych przez miasta, a reszta twojego zadania to skompilowanie ich do PDF (nie jest możliwe, aby RStudio skompilowało wiele plików tex, AFAIK, ale jest trywialne, aby to zrobić w wierszu poleceń lub w R z texi2dvi()
).
Jest jedna rzecz, na którą musisz uważać - musisz użyć innego prefiksu figury (opcja fig.path
) dla każdego pliku wyjściowego, w przeciwnym razie różne miasta mogą zastąpić inne wyjście figury. W knitr
, można to zrobić za pomocą to:
<<setup, echo=FALSE>>=
opts_chunk$set(fig.path = paste('my-prefix-', city, sep = ''))
@
Uważam, że powinno to być bezpieczne do tworzenia wielu raportów z pętlą.
BTW, z pewnością możesz osiągnąć ten sam cel dzięki Sweave; być może dowiesz się, dlaczego rozwinąłem knitr
później (to jest off-topic, więc nie będę tutaj rozbudowywał).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:33
- Zrób to w R
- Umieść wszystkie dane wyjściowe dla konkretnego miasta na liście
- Napisz swój RnW z kawałkami tylko wywołując wyjścia
- Zapisz obraz R w tym samym folderze co raport Sweave i ustaw wd w tym samym folderze
- Sweave ("yourfile.RnW", output = " yourcity.tex")
- Użyj texi2dvi do skompilowania pliku tex z R
Jeśli masz wiele miast, powinieneś umieścić to w funkcji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-12 09:19:31