2016-05-04 18 views
0

Hallo Ich möchte robfilter mit verwenden. Da die Standard robfilter Antwort nicht serializable als solche JSon erstellt ich mein eigenes Paket mit dieser Funktion:opencpu inkonsistente JS Serialisierung

detectOutliers <- function(json, windowWidth) { 
    x <- json 
    robfil <- robust.filter(x[[2]], width=windowWidth, outlier="T", online=FALSE) 
    outlierDf <- data.frame(period=x[[1]], totalAmount=x[[2]], isOutlier=robfil$ol) 
    return(outlierDf) 
} 

Wenn lokal getestet wie

args <- fromJSON('{"json":[{"Period":1393632000,"x":453.2003},{"Period":1396310400,"x":742.9013},{"Period":1398902400,"x":52366.3592},{"Period":1401580800,"x":7660.234},{"Period":1404172800,"x":3967.7503},{"Period":1406851200,"x":2620.771},{"Period":1409529600,"x":1927.5348},{"Period":1412121600,"x":2094.795},{"Period":1414800000,"x":1830.223},{"Period":1417392000,"x":2286.1982},{"Period":1420070400,"x":3047.4511},{"Period":1422748800,"x":2001.4622},{"Period":1425168000,"x":1763.6833},{"Period":1427846400,"x":2033.9456},{"Period":1430438400,"x":4568.8964},{"Period":1433116800,"x":2104.0584},{"Period":1435708800,"x":1522.6288},{"Period":1438387200,"x":533.8585},{"Period":1441065600,"x":667.3039}], "windowWidth":11}') 
outliers <- do.call(detectOutliers, args) 
outliers 

es richtig den folgenden Datenrahmen zeigt, wo jede Zeile besiedelt

period totalAmount isOutlier 
1 1393632000 453.2003   0 
2 1396310400 742.9013   0 
3 1398902400 52366.3592   1 
4 1401580800 7660.2340   0 
5 1404172800 3967.7503   0 
..... 

toJson(outliers) wiederum serialisiert korrekt dieses Datenrahmens.

Aber wenn auf opencpu wie

curl http://opencpuURL/ocpu/library/possibly/R/detectOutliers/json -d \ 
'{"json":[{"Period":1393632000,"x":453.2003},{"Period":1396310400,"x":742.9013},{"Period ":1398902400,"x":52366.3592},{"Period":1401580800,"x":7660.234},{"Period":1404172800,"x":3967.7503},{"Period":1406851200,"x":2620.771},{"Period ":1409529600,"x":1927.5348},{"Period":1412121600,"x":2094.795},{"Period":1414800000,"x":1830.223},{"Period":1417392000,"x":2286.1982},{"Period ":1420070400,"x":3047.4511},{"Period":1422748800,"x":2001.4622},{"Period":1425168000,"x":1763.6833},{"Period":1427846400,"x":2033.9456},{"Period ":1430438400,"x":4568.8964},{"Period":1433116800,"x":2104.0584},{"Period":1435708800,"x":1522.6288},{"Period":1438387200,"x":533.8585},{"Period ":1441065600,"x":667.3039}],"windowWidth":11}' \ 
-H "Content-Type: application/json" 

Das Ergebnis ist ziemlich merkwürdig genannt. Wie können Sie einige Zeilen sehen enthalten nur zwei Felder

[ 
    { 
    "period": 1393632000, 
    "totalAmount": 453.2003, 
    "isOutlier": 0 
    }, 
    { 
    "period": 1396310400, 
    "totalAmount": 742.9013, 
    "isOutlier": 0 
    }, 
    { 
    "totalAmount": 52366.3592, 
    "isOutlier": 1 
    }, 
.... 

Was ist hier falsch?

Antwort

0

Es gab einige Leerzeichen in der JSON-Nutzlast. Unter Verwendung von etwas wie

"{\" json \ ": [{\" Periode \ ": 2, \" x \ ": 1}, {\" Periode \ ": 1, \" x \ ": 1 }, {\ "Perio d \": 3, \ "x \": 1}], \ "windowWidth \": "3"} "-H" Inhaltstyp: application/json "

löst das Problem