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