【问题标题】:Generating knitr reports生成 knitr 报告
【发布时间】:2013-03-08 23:02:27
【问题描述】:

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

我知道brew 包是为这样的东西设置的,我知道brewknitr 之间有重叠,但我不知道我应该使用什么。

This answer using Brew and Sweave 只需稍加修改即可工作,但有没有一种很好的knitr 方法可以绕过brew

【问题讨论】:

  • 是否有某些原因您不能制作县的向量然后对其进行迭代?
  • @BryanHanson 一点也不,这正是我在 Ramnath 的链接答案中使用 brew 所做的。但它感觉就像我应该能够在knitr中做的事情。
  • 你在knitr试过了吗?如果它通过交互或脚本在R 中工作,我不明白为什么你也不能用knitr 做到这一点。我从来没有用过brew,但是我用过knitrsweave,我觉得应该是可以的。
  • 关键是循环内内容的性质。如果主要是程序生成的内容,knitr 效果很好。但是当有文本标记时, brew + knitr 更干净。在您的情况下,您可以使用子模板仅使用 knitr 来实现它。
  • 对于这个特定的应用程序,knit_expand() 应该可以正常工作;请参阅github.com/yihui/knitr-examples中的示例 075

标签: r knitr


【解决方案1】:

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

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

为了更有效地处理错误,您还可以将 knit2pdf 调用包装在 tryCatch 语句中:

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

【讨论】:

  • c 是一个非常糟糕的循环索引名称,因为它在 R 中也是一个非常重要的函数。您可以考虑重命名索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 2023-03-21
  • 2011-04-21
  • 1970-01-01
  • 2014-09-12
相关资源
最近更新 更多