【问题标题】:OpenCPU and multi-page plotsOpenCPU 和多页绘图
【发布时间】:2014-04-02 16:43:08
【问题描述】:

我正在尝试从函数中捕获多图 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 的几何图形和页码(存在解决方法)。

还有其他方法吗?

【问题讨论】:

    标签: r pdf opencpu


    【解决方案1】:

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

    一些建议:

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

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

    【讨论】:

    • 这就是我的怀疑,因为我不流利地使用recordedPlot,所以我想确定一下。我也怀疑 working directory 的事情,这就是为什么我认为 tempfile() 和 Rmd 事情有时可以工作。这也解释了为什么在测试时“显示”良好的图形(即计算文本/元素的间距)并不总是通过这种机制呈现。 (使用非 R 工具对多个 PDF 文件进行后处理将依赖于在客户端计算机上安装适当的工具,而不是我可以依赖的东西。)谢谢。
    猜你喜欢
    • 2016-02-09
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多