1

我知道 OpenCPU 的接口是 RESTful 的。不过,如果可能的话,我想在函数调用之间保存数据。

我天真地创建了以下包:

vals <- c()

fnInit <- function() {
  vals <<- c('a','b','c')
}

但我得到了错误:当我调用 fnInit 函数时,无法更改“vals”的锁定绑定的值。我明白为什么会这样。

然后我尝试了:

fnBoth <- local({
  vals <- c('a','b','c')
  function(which) {
    if (which == 0) {
      vals
    } else if (which == 1) {
      vals <<- c(vals,'d')
      vals
    }
  }
})

但每次我发布到 = 1 的 fnBoth 函数时,我都会得到相同的响应:[1]“a”“b”“c”“d”

如果我再次调用该函数,我会得到相同的答案。因此,似乎值 vals 每次都被重置。

我的问题是:可以在函数调用之间保存数据吗?上述尝试并非详尽无遗 - 也许还有另一种技术?或者,我应该简单地将值保存到磁盘吗?

谢谢

4

1 回答 1

1

我并不完全清楚您要完成什么,也许您可​​以详细说明您希望构建的应用程序类型。

OpenCPU 支持链接函数调用来计算,例如f(g(x), h(y))。这是通过将已完成调用的会话 ID 作为参数传递给后续调用来完成的。查看有关参数格式的文档:https ://public.opencpu.org/api.html#api-arguments 。它包括一个通过计算来说明这一点的示例summary(read.csv("mydata.csv"))

#upload local file mydata.csv
curl https://public.opencpu.org/ocpu/library/utils/R/read.csv -F "file=@mydata.csv"

#replace session id with returned one above
curl https://public.opencpu.org/ocpu/tmp/x067b4172/R/.val/print
curl https://public.opencpu.org/ocpu/library/base/R/summary -d 'object=x067b4172'

第一个请求调用read.csv返回数据帧的函数。在最后一行中,我们通过传递会话 ID 来调用函数,在该summary函数中我们将object参数设置为等于先前调用的输出(即数据帧)。

于 2013-08-27T21:05:30.110 回答