我试图从一个函数中捕获一个多图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文件,但不能作为一个组合文件。
两种可能的解决方法,并非没有问题:
使用par(mfrow)
,layout()
或类似的机制,虽然这最终会创建一个怪物图像(我在我的代码中处理三个以上的图像)
使用tempfile
,即时创建Rmd文件,在会话中返回文件名(尚未对此进行测试),并使用OpenCPU对Rmd文件的处理。不幸的是,现在使用LaTeX的几何和页码编号(为此存在解决方法)。
还有其他方法吗?
答案 0 :(得分:1)
好问题。 OpenCPU使用evaluate
捕获图形,每个图形单独存储。 API本身不支持在单个文件中组合多个图形。我个人会在应用程序层中进行这种PDF
后处理(即使用非R工具),但也许在API中支持它会很有用。
一些建议:
您的R函数/脚本保存到工作目录(即getwd()
)的任何文件也将通过API提供。所以你可以做的一件事就是在R代码中手动创建合并的pdf
文件并将其保存到工作目录,然后通过opencpu下载。
图形实际上是recordedPlot
个对象,除了png
,pdf
和svg
之外,您还可以将图形检索为rds
或{ {1}}。因此,您可以编写一个R函数,从API下载rda
对象,然后打印它。不确定这对您的用例是否有帮助。