Может ли Sweave автоматически создавать много PDF-файлов?
Я анализирую измерения из многих городов (сотни), и вам нужно создавать отдельные отчеты по городу (в формате Adobe pdf).
Мой процесс выглядит так:
- Сначала RStudio подготовит данные для отображения, сохраненные в X.Rda.
- В X.Rnw (RStudio) я читаю X.Rda, выбираю один город и создаю таблицы и графики.
- В RStudio я нажимаю «Compile PDF» и создается отчет города X.pdf.
- Я перехожу к шагу 2, выбираю другой город и т. Д.
Это очень утомительно, и он идеально подходит для петли для каждого города, но как это можно сделать?
Спасибо, r-contributors!
/Крис
Вы можете использовать что-то вроде цикла for
с изменяющейся глобальной переменной, которая контролирует, какой город вы хотите переплетать в отчет; см. другой пост Run Sweave или knitr с объектами из существующей сессии R
Код будет похож (предположим, что cities
является символьным вектором, и я использую пакет knitr
в качестве примера, потому что вы можете указать имя файла для вывода):
for (city in cities) { knit('city_template.Rnw', output = paste('report_', city, '.tex', sep = '')) }
Внутри city_template.Rnw
вас есть кусок, как
<>= make_plot(city, ...) whatever(city, ...) @
Затем вы получите серию файлов tex, названных городами, а остальная часть вашей работы – скомпилировать их в формате PDF (невозможно, чтобы RStudio мог скомпилировать несколько файлов tex, AFAIK, но это тривиально делать это в командной строке или в R с texi2dvi()
).
Есть одна вещь, которую вам нужно быть осторожным – для каждого выходного файла вам нужно использовать другой префикс рисунка (опция fig.path
), иначе разные города могут переопределять выводные данные друг друга. В knitr
это можно сделать следующим образом:
<>= 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
Если у вас много городов, вы должны включить это в функцию.