【问题标题】:Can data be saved between calls to the openCPU server?可以在调用 openCPU 服务器之间保存数据吗?
【发布时间】:2013-08-27 18:03:05
【问题描述】:

我了解 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 。

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

谢谢

【问题讨论】:

    标签: persistence opencpu


    【解决方案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 函数。在最后一行,我们调用 summary 函数,我们通过传递会话 ID 将 object 参数设置为等于前一次调用的输出(即数据帧)。

    【讨论】:

    • 我的用户将在select2 表单字段中输入,这意味着击键会在输入时发送到服务器。我使用击键来匹配 12,000 个符号列表,返回匹配的符号列表(子字符串)。我希望能够检索一次符号列表,而不是每次按键触发对服务器的调用。
    • 我不明白这与您的问题有什么关系?好像你只需要在javascript中处理select2? R/OpenCPU 需要什么?
    • 我为不够清楚而道歉。是的,select2 用于 javascript 函数。当用户在字段中输入数据时,select2 使 ajax 回调到服务器。我正在使用 ajax 请求,因为我发现我需要将符号列表保留在服务器端;它对客户端来说太大了。所以,我想在服务器端使用 OpenCPU/R 函数来处理 ajax 调用。它会在符号列表中查找并返回匹配项。该列表(12,000 个基因符号)存储在数据库中。每次调用此函数时,我都试图避免加载这些符号。
    猜你喜欢
    • 2014-01-23
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多