Подтвердить что ты не робот

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

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

Мой процесс выглядит следующим образом:

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

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

Спасибо, r-contributors!

/Chris

4b9b3361

Ответ 1

Вы можете использовать что-то вроде цикла 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, ...)
@

Затем вы получите серию файлов tex, названных городами, а остальная часть вашей работы - скомпилировать их в формате PDF (невозможно, чтобы RStudio скомпилировал несколько файлов tex, AFAIK, но это тривиально сделать это в командной строки или в R с помощью texi2dvi()).

Есть одна вещь, о которой вы должны быть осторожны - для каждого выходного файла вам нужно использовать другой префикс рисунка (опция fig.path), иначе разные города могут переопределить вывод других фигур. В knitr это можно сделать следующим образом:

<<setup, echo=FALSE>>=
opts_chunk$set(fig.path = paste('my-prefix-', city, sep = ''))
@

Я считаю, что это должно быть безопасным для создания множества отчетов с циклом.

Кстати, вы наверняка можете достичь той же цели с Sweave; возможно, вы узнаете, почему я разработал knitr позже (это не по теме, поэтому я не буду расширять здесь).

Ответ 2

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

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