Может ли Sweave автоматически создавать множество PDF-файлов?
Я анализирую измерения во многих городах (сотнях), и мне нужно создавать отдельные отчеты для каждого города (в формате Adobe PDF).
Мой процесс такой:
- Сначала RStudio подготовит данные для показа, сохраненные в X.Rda.
- В X.Rnw (RStudio) я читаю X.Rda, выбираю один город и создаю таблицы и графики.
- В RStudio нажимаю "Компилировать PDF" и выдается отчет о городе X.pdf.
- Я иду к шагу 2, выбираю другой город и так далее.
Это очень утомительно и выглядит идеально для петли в каждом городе, но как это сделать?
Спасибо r-вкладчикам!
/Крис
2 ответа
Вы можете использовать что-то вроде for
цикл с изменением глобальной переменной, который контролирует, какой город вы хотите включить в отчет; см. другой пост Run Sweave или knitr с объектами из существующего сеанса R
Код будет похож (предположим, 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, ...)
@
Затем вы получите серию текстовых файлов с именами по городам, а остальная часть вашей работы - скомпилировать их в PDF (для RStudio невозможно скомпилировать несколько текстовых файлов, AFAIK, но это тривиально сделать в командной строке или в R с texi2dvi()
).
Есть одна вещь, которую вы должны быть осторожны - вы должны использовать другой префикс цифры (опция fig.path
) для каждого выходного файла, в противном случае разные города могут переопределить вывод данных друг друга. В knitr
это можно сделать так:
<<setup, echo=FALSE>>=
opts_chunk$set(fig.path = paste('my-prefix-', city, sep = ''))
@
Я считаю, что это может быть безопасно, чтобы создавать много отчетов с циклом.
Кстати, вы, безусловно, можете достичь той же цели с Sweave; возможно, вы будете знать, почему я разработал knitr
позже (это не по теме, поэтому я не буду здесь расширяться).
- Сделайте это в среде R.
- Поместите все выходные данные для определенного города в список
- Напишите свой RnW с кусками, просто называя результаты
- Сохраните изображение R в той же папке, что и отчет Sweave, и установите wd в эту же папку.
- Sweave("yourfile.RnW", output = "yourcity.tex")
- Используйте texi2dvi для компиляции вашего tex-файла из R
Если у вас много городов, вы должны включить это в функцию.