OpenCPU和多页图

时间:2014-04-02 16:43:08

标签: r pdf opencpu

我试图从一个函数中捕获一个多图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的几何和页码编号(为此存在解决方法)。

  3. 还有其他方法吗?

1 个答案:

答案 0 :(得分:1)

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

一些建议:

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

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