【问题标题】:Can Sweave produce many pdfs automatically?Sweave 可以自动生成许多 pdf 文件吗?
【发布时间】:2014-09-08 13:46:49
【问题描述】:

我分析了许多城市(数百个)的测量结果,需要为每个城市创建单独的报告(Adobe pdf 格式)。

我的流程是这样的:

  1. 第一个 RStudio 准备要显示的数据,保存在 X.Rda 中。
  2. 在 X.Rnw (RStudio) 中,我阅读 X.Rda,选择一个城市,然后生成表格和绘图。
  3. 在 RStudio 中,我按“编译 PDF”并生成城市报告 X.pdf。
  4. 我转到第 2 步,选择另一个城市,依此类推。

这很乏味,看起来非常适合每个城市的 for 循环,但是怎么做呢?

感谢 r 贡献者!

/克里斯

【问题讨论】:

  • 这可以通过brewsweave 的组合来完成。看看这个例子在这里stackoverflow.com/questions/8434371/…。或者,您可以编写一个函数来读取 city 并将 doc 编译为 pdf,然后循环遍历城市。
  • 这个需要扩展一下。您的 .Rnw 如何选择城市?您使用的是什么操作系统(因为这可以在 Linux 中轻松编写脚本)?或者您可以使用 R 中的 Sweave(file) 函数,但我们需要知道如何使 .Rnw 使用一组特定的数据。您可能需要使用“brew”从模板制作特定的 .Rnw。然后下一步是制作 PDF - ?Sweave 从工具包中建议 texi2dvi...

标签: r sweave knitr


【解决方案1】:

您可以使用像for 循环这样的东西,它会改变一个全局变量,它可以控制您想要将哪个城市编织到报告中;见其他帖子Run Sweave or knitr with objects from existing R session

代码会是这样的(假设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(这是题外话,这里就不展开了)。

【讨论】:

    【解决方案2】:
    • 在 R 环境中执行此操作。
    • 将特定城市的所有输出放在一个列表中
    • 用只调用输出的块编写 RnW
    • 将您的 R 图像保存在与 Sweave 报告相同的文件夹中,并将 wd 设置为相同的文件夹
    • Sweave("yourfile.RnW", output = "yourcity.tex")
    • 使用 texi2dvi 从 R 编译你的 tex 文件

    如果你有很多城市,你应该把它放到一个函数中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多