Ответ 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
позже (это не по теме, поэтому я не буду расширять здесь).