问题:如何使用存储在 OpenCPU 服务器上的输出文件作为另一个函数的输入?
背景: 我正在尝试在 openCPU 中使用 knitr 和 markdown 来生成 html,我可以用它来更新带有页面加载统计信息的网页。
基本工作流程如下:
- 生成 .Rmd 文件,存储在本地。
- 访问使用 AJAX 将 .Rmd 文件上传到服务器上的 OpenCPU 实例的网页。
- 通过 openCPU 使用
knit
函数将函数转换为存储在服务器上的 *.md 文件。 - 对服务器上存储的文件使用
markdownToHTML
函数(通过传入通过调用knit
生成的适当哈希值)并接收包含以下内容的 AJAX 回复:生成的 HTML。 - 使用新的 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'
但是,当我向 /R/tmp/x7821c69f79/bin
发出 GET 请求时,会返回 test.md
的内容。所以我知道在调用 knit
时文件已正确存储。
那么,这是怎么回事?换句话说,如何使用存储在 OpenCPU 服务器上的输出文件作为另一个函数的输入?
最佳答案
嗯,/store
错误看起来像是一个错误,我会调查一下。
也许在第 3 步中,您可以让函数返回 test.md
的内容,例如以return(readLines(test.md))结尾
?或者更好的是,不要输出到 test.md
而是输出到 tmpfile()
并返回其中的内容。这样,输出将作为 R 对象存储在存储中,而不是原始文件,并且您可以只传递一个参数,例如第 4 步中的 file=x7821c69f79
。
你看过markdown example app吗? ?查看来源here和 here .
关于opencpu - 使用存储在 OpenCPU 服务器上的输出文件作为后续函数调用的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12679259/