1

我正在尝试从函数中捕获多图 pdf。在 R 中,这给了我一个三页的 PDF:

pdf(file='test.pdf', onefile=TRUE)
lapply(1:3, 'plot')
dev.off()

使用 OpenCPU:

$ curl http://localhost:6977/ocpu/library/base/R/lapply -H 'Content-Type: application/json' -d '{"X":[1,2,3], "FUN":"plot"}'
/ocpu/tmp/x0dc3dad0/R/.val
/ocpu/tmp/x0dc3dad0/graphics/1
/ocpu/tmp/x0dc3dad0/graphics/2
/ocpu/tmp/x0dc3dad0/graphics/3
/ocpu/tmp/x0dc3dad0/stdout
/ocpu/tmp/x0dc3dad0/source
/ocpu/tmp/x0dc3dad0/console
/ocpu/tmp/x0dc3dad0/info

我可以将任何单个页面作为单页 PDF 文件获取,但不能作为一个组合文件获取。

两种可能的解决方法,并非没有问题:

  1. 使用par(mfrow),layout()或类似的机制,尽管这最终会创建一个怪物图像(我在我的代码中处理三个以上的图像)。

  2. 使用tempfile,即时创建 Rmd 文件,在会话中返回文件名(尚未对此进行测试),并使用 OpenCPU 处理 Rmd 文件。不幸的是,这现在使用 LaTeX 的几何图形和页码(存在解决方法)。

还有其他方法可以做到这一点吗?

4

1 回答 1

1

好问题。OpenCPU 捕获图形,使用evaluate它单独存储每个图形。API 本身不支持在单个文件中组合多个图形。我个人会PDF在应用层(即使用非 R 工具)中进行这种后期处理,但也许在 API 中支持这一点会很有用。

一些建议:

  • 您的 R 函数/脚本保存到工作目录(即getwd())的任何文件也将通过 API 变得可用。所以你可以做的一件事是在你的 R 代码中手动创建你的组合pdf文件并将其保存到工作目录,然后通过 opencpu 下载它。

  • 图形实际上是recordedPlot对象,除png,pdf和之外svg,您还可以将图形检索为rdsrda。因此,您可以编写一个 R 函数,recordedPlot从 API 下载对象然后打印它。不确定这对您的用例是否有帮助。

于 2014-04-02T19:22:50.817 回答