【问题标题】:OpenCPU: No method asJSON S3 classOpenCPU:没有方法 asJSON S3 类
【发布时间】:2015-04-06 23:18:01
【问题描述】:

我正在尝试获取以下资源的 JSON 表示:

POST http://myserver/ocpu/library/stats/R/smooth.spline/json

我得到的错误是No method asJSON S3 class: smooth.spline

smooth.spline() 调用的结果具有以下结构:

    List of 15
 $ x       : num [1:11] 1 2 3 4 5 6 7 8 9 10 ...
 $ y       : num [1:11] 2.55 2.98 3.42 3.85 4.29 ...
 $ w       : num [1:11] 1 1 1 1 1 1 1 1 1 1 ...
 $ yin     : num [1:11] 1 4 3 5 3 6 8 5 3 6 ...
 $ data    :List of 3
  ..$ x: num [1:11] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ y: num [1:11] 1 4 3 5 3 6 8 5 3 6 ...
  ..$ w: num [1:11] 1 1 1 1 1 1 1 1 1 1 ...
 $ lev     : num [1:11] 0.318 0.236 0.173 0.127 0.1 ...
 $ cv.crit : num 3.7
 $ pen.crit: num 27.2
 $ crit    : num 3.7
 $ df      : num 2
 $ spar    : num 1.49
 $ lambda  : num 40679
 $ iparms  : Named int [1:3] 1 0 28
  ..- attr(*, "names")= chr [1:3] "icrit" "ispar" "iter"
 $ fit     :List of 5
  ..$ knot : num [1:17] 0 0 0 0 0.1 0.2 0.3 0.4 0.5 0.6 ...
  ..$ nk   : int 13
  ..$ min  : num 1
  ..$ range: num 10
  ..$ coef : num [1:13] 2.55 2.69 2.98 3.42 3.85 ...
  ..- attr(*, "class")= chr "smooth.spline.fit"
 $ call    : language smooth.spline(x = x)
 - attr(*, "class")= chr "smooth.spline"

有没有办法使用 OpenCPU 获取列表的y 组件?

【问题讨论】:

    标签: r opencpu jsonlite


    【解决方案1】:

    两种可能的方法。第一种是使用两步 OpenCPU 过程,它允许您将参数传递给toJSON,以便您可以设置force 参数。所以:

    POST http://myserver/ocpu/library/stats/R/smooth.spline
    

    这将为您提供Location 响应标头中的密钥。例如,您抓住它:

    GET http://myserver/ocpu/tmp/x123456789/R/.val/json?force=true
    

    force 参数将自动从对象中取消分类/删除 json 不支持的字段。

    另一种方法是为smooth.spline 编写一个简单的包装器并调用它。例如:

    mysmooth <- function(...){
      obj <- smooth.spline(...)
      obj[c("x", "y", "yin")]
    }
    

    我会推荐第二种方法,因为smooth.spline 对象中似乎有很多东西对客户来说并不真正有趣,并且会产生不必要的开销。

    【讨论】:

    • force=true 方法确实有效,但我同意你的观点,我想另辟蹊径。我应该在服务器上的某个地方加载自定义函数还是使用eval 请求显式调用它?一个参考链接就足够了。此外,您从哪里找到我上一个问题的答案?感觉我在 [文档] [opencpu.org/api.html] 中找不到我需要的所有东西
    • 您应该将自定义函数放在一个包中并安装在服务器上。真的很简单。
    • 非常感谢。第二个问题呢?是否有任何我不知道的文档或某些功能实际上没有很好的文档记录?
    • 文档有点稀疏。 api doc 声明 /json 格式是使用 jsonlite::toJSON 实现的,它有一个 force 参数。
    猜你喜欢
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2014-04-21
    • 1970-01-01
    • 2020-12-24
    • 2018-08-20
    • 1970-01-01
    相关资源
    最近更新 更多