Может ли Sweave автоматически создавать множество PDF-файлов?

Я анализирую измерения во многих городах (сотнях), и мне нужно создавать отдельные отчеты для каждого города (в формате Adobe PDF).

Мой процесс такой:

  1. Сначала RStudio подготовит данные для показа, сохраненные в X.Rda.
  2. В X.Rnw (RStudio) я читаю X.Rda, выбираю один город и создаю таблицы и графики.
  3. В RStudio нажимаю "Компилировать PDF" и выдается отчет о городе X.pdf.
  4. Я иду к шагу 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

Если у вас много городов, вы должны включить это в функцию.

Другие вопросы по тегам