2

问题:如何使用存储在 OpenCPU 服务器上的输出文件作为另一个函数的输入?

背景: 我正在尝试在 openCPU 中使用knitrmarkdown生成 html,我可以使用它来更新带有页面加载统计信息的网页。

基本工作流程如下:

  1. 生成 .Rmd 文件,存储在本地。
  2. 访问使用 AJAX 将 .Rmd 文件上传到服务器上的 OpenCPU 实例的网页。
  3. knit通过 openCPU使用该函数将函数转换为存储在服务器上的 *.md 文件。
  4. 对存储在服务器上的文件使用该markdownToHTML函数(通过传入通过调用生成的适当哈希knit)并接收包含生成的 HTML 的 AJAX 回复。
  5. 使用新的 HTML 更新网页。

就目前而言,我的这个过程一直到第 4 步。我可以knit通过表单请求 POST 调用传入 .Rmd 文件,并且我收到来自 OpenCPU 的以下回复:

{
"object" : "xa9eaea44e1",
"graphs" : [
    "xf31dcfe7f3"
],
"files" : {
    "figure" : "xfc55396fd8",
    "test.md" : "x7821c69f79"
}
}

通过函数"test.md"生成的输出文件在哪里。knit现在,我尝试使用散列(在这种情况下"x7821c69f79",通过 POST 到/R/pub/markdown/markdownToHTML/ascii以下参数:

file     /R/tmp/x7821c69f79/bin

这将返回HTTP 400带有以下消息的错误:

cannot open URL 'http://localhost/R/store/R/tmp/x7821c69f79/bin/rds'

但是,当我向 发出 GET 请求时,会返回/R/tmp/x7821c69f79/bin的内容。test.md所以我知道文件在调用knit.

那么,这里发生了什么?换句话说,如何使用存储在 OpenCPU 服务器上的输出文件作为另一个函数的输入?

4

1 回答 1

2

嗯,这个/store错误看起来像一个错误,我会调查的。

也许在第 3 步中,您可以让函数返回 的内容test.md,例如以return(readLines(test.md))?结尾 或者更好的是,不要输出到test.mdatmpfile()并返回它的内容。这样,输出将作为 R 对象存储在存储中,而不是原始文件,您可以只传递一个参数,例如file=x7821c69f79在步骤 4 中。

您是否看过降价示例应用程序?请参阅此处此处的来源。

于 2012-10-01T20:40:44.060 回答