2015-02-06 74 views
3

我試圖得到如下資源的JSON表示:OpenCPU:沒有方法asJSON S3

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組成部分?

回答

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支持的對象會自動unclass /降場。

另一種方法是編寫一個簡單的包裝smooth.spline並調用它。例如:

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

我推薦第二種方法,因爲似乎是在smooth.spline對象,是不是真的很有趣,客戶很多東西,而且會產生不必要的開銷。

+0

'force = true'方法確實有效,但我同意你的意見,我想換個方式。我應該在服務器的某個地方加載自定義函數還是用'eval'請求顯式調用它?參考鏈接應該足夠了。 此外,你在哪裏找到我以前的問題的答案?感覺就像我無法在[文檔] [https://www.opencpu.org/api.html] – Maurizio 2015-02-06 22:46:10

+0

中找到所需的全部內容。您應該將自定義函數放在一個包中並將其安裝到服務器上。它非常簡單。 – Jeroen 2015-02-06 23:09:51

+0

非常感謝。第二個問題呢?有沒有我不知道的文檔,或者某些功能實際上沒有很好的記錄? – Maurizio 2015-02-07 00:24:21