我分析来自许多城市的测量数据(数百个),并且需要为每个城市创建单独的报告(采用Adobe pdf格式).
我的过程是这样的:
这非常繁琐,看起来非常适合每个城市的循环,但它怎么能完成呢?
谢谢r-contributors!
/克里斯
Yih*_*Xie 27
您可以使用类似for
循环的全局变量,它可以控制您想要编入报表的城市; 请参阅另一篇文章Run Sweave或knitr与现有R会话中的对象
代码就像(假设cities
是一个字符向量,我使用knitr
包作为示例,因为您可以指定输出的文件名):
for (city in cities) {
knit('city_template.Rnw', output = paste('report_', city, '.tex', sep = ''))
}
Run Code Online (Sandbox Code Playgroud)
在里面city_template.Rnw
,你有一块像
<<do-my-job>>=
make_plot(city, ...)
whatever(city, ...)
@
Run Code Online (Sandbox Code Playgroud)
然后你将获得一系列由城市命名的tex文件,你的工作的其余部分是将它们编译成PDF(RStudio不可能编译多个tex文件,AFAIK,但是在命令行中执行它或者它是微不足道的在R with texi2dvi()
).
有一件事你需要小心 - 你必须fig.path
为每个输出文件使用不同的数字前缀(选项),否则不同的城市可以覆盖彼此的数字输出.在knitr
,这可以通过这样做:
<<setup, echo=FALSE>>=
opts_chunk$set(fig.path = paste('my-prefix-', city, sep = ''))
@
Run Code Online (Sandbox Code Playgroud)
我相信通过循环生成许多报告应该是安全的.
顺便说一句,你可以用Sweave达到同样的目标; 也许你会知道我之后开发的原因knitr
(这是偏离主题的,所以我不会在这里扩展).