Может ли Sweave автоматически создавать множество PDF-файлов? - PullRequest
20 голосов
/ 15 декабря 2011

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

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

  1. Первый RStudio для подготовки данных к отображению, сохраненных в X.Rda.
  2. В X.Rnw (RStudio) я читаю X.Rda, выбираю один город и создаю таблицы и графики.
  3. В RStudio я нажимаю «Компилировать PDF» и создается отчет о городе X.pdf.
  4. Я перехожу к шагу 2, выбираю другой город и т. Д.

Это очень утомительно и выглядит идеально для петли "за город", но как это сделать?

Спасибо, r-участники!

/ Chris

Ответы [ 2 ]

27 голосов
/ 15 декабря 2011

Вы можете использовать что-то вроде цикла for с изменением глобальной переменной, которая определяет, какой город вы хотите добавить в отчет; см. другой пост Запустите 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 позже (это не по теме, поэтому я не буду здесь расширяться).

0 голосов
/ 12 февраля 2014
  • Сделайте это в среде R.
  • Поместите все выходные данные для определенного города в список
  • Напишите свой RnW с кусками, просто называя выходные данные
  • Сохраните изображение R в той же папке, что и отчет Sweaveи установите wd в эту же папку
  • Sweave ("yourfile.RnW", output = "yourcity.tex")
  • Используйте texi2dvi для компиляции вашего tex-файла из R

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

...