生成knitr报告

10

我对knitr还比较陌生,但我已经写了一个脚本来生成一个县的报告。在第一个代码块中的第一行是display_county <- "King",它查询数据库以制作关于King County的各种好东西。现在我想为我州的每个县创建报告。唯一需要更改的脚本行是display_county的定义。

我知道包可以设置这样的东西,我也知道和knitr之间有重叠,但我不知道我应该使用什么。

这个答案使用Brew和Sweave会在稍加修改后奏效,但是否有一个不错的knitr方法绕过brew


你有什么原因不能创建一个县向量,然后对其进行迭代吗? - Bryan Hanson
@BryanHanson一点也不,这正是我使用brew所做的,就像Ramnath链接中的答案一样。但是在knitr中完成这个任务感觉更合适。 - Gregor Thomas
3
针对这个特定应用程序,knit_expand() 应该能够很好地工作;请参见 https://github.com/yihui/knitr-examples 中的示例075。 - Yihui Xie
我这里可能提出一个有争议的观点,但我的坚定信念是,与其他方法相比,特别是涉及到模板时,brew + knit 提供了更加干净的解决方案。请参见这个gist来与knit_expand方法进行比较。我很欢迎在这里进行利弊讨论。 - Ramnath
你也可以尝试使用 pander,就像 http://rapporter.github.com/pander/#brew-to-pandoc 中所描述的那样 - 请查看 short-code-long-report.brew 示例。 - daroczig
显示剩余3条评论
1个回答

5

如果我理解正确,您将为每个县使用相同的Rnw文件,因此每个县仅不同的变量是display_county。首先,我会调用数据库以获取所有县名并将其存储在向量中(例如myCounties)。之后,您可以使用包含以下内容的脚本生成报告:

for(dc in myCounties)  {
  knit2pdf(input='county_report.Rnw', output=paste0(dc, '_county_report.pdf'))
}

为了更有效地处理错误,您还可以在tryCatch语句中包装knit2pdf调用:
for(dc in myCounties)  {
  tryCatch(knit2pdf(input='county_report.Rnw', output=paste0(dc, '_county_report.pdf')))
}

1
c是循环索引的一个相当糟糕的名称,因为它在R中也是一个相当重要的函数。您可能需要考虑重新命名该索引。 - Dason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接