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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With