Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenCPU: No method asJSON S3 class

I am trying to get the JSON representation of the following resource:

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

The error I get is No method asJSON S3 class: smooth.spline.

The result of a smooth.spline() call has the following structure:

    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"

Is there a way to get the y component of the list using OpenCPU?

like image 668
Maurizio Avatar asked Dec 02 '25 08:12

Maurizio


1 Answers

Two possible approaches. The first is to use the two-step OpenCPU procedure which allows you to pass arguments to toJSON so you can set the force argument. So:

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

This will give you the key in the Location response header. You grab that, for example:

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

The force argument will automatically unclass/drop fields from the object that are not supported in json.

The other approach is to write a simple wrapper for smooth.spline and call that. For example:

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

I would recommend the second approach because there seems to be a lot of stuff in the smooth.spline object that is not really interesting to the client, and will create unnecessary overhead.

like image 177
Jeroen Ooms Avatar answered Dec 04 '25 00:12

Jeroen Ooms



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!