2016-05-15 6 views
2

Gibt es ein gutes R-Paket, das Vorhersagemodelle und andere komplexe Objekte in und aus JSON konvertieren kann? Ich habe lineares Regressionsmodell aus diesem Beispiel:R - Serialisieren von R-Modellen als JSON

eruption.lm = lm(eruptions ~ waiting, data=faithful) 
newdata = data.frame(waiting=80) 
predict(eruption.lm, newdata) 

Ich mag eruption.lm Modell als JSON Speicher serialisiert es irgendwo oder es zu einem externen System zu senden, und deserialisieren es später und tat Vorhersage. Ich habe mit jsonlite R package versucht:

json<-serializeJSON(eruption.lm) 
lin.model<-unserializeJSON(json) 

predict(lin.model, newdata) 

kann jedoch jsonlite nicht komplexe Objekte handhaben - entserialisierten Modell liefert in der Vorhersage einen Fehler:

Error in eval(expr, envir, enclos) : could not find function "list" 

Gibt es ein besseres Paket, das/deserialisieren Objekte serialisiert werden kann.

Antwort

2

Sie müssen es nur helfen, die Umwelt für terms erinnern:

attr(lin.model$terms, ".Environment") <- .GlobalEnv 

predict(lin.model, newdata) 

##  1 
## 4.17622 

ich dies als Erweiterung Anfrage über Datei würde http://github.com/jeroenooms/jsonlite/issues

Alternativ Sie nativen R binäre Serialisierung verwenden können:

Wenn Sie nicht unbedingt eine Text-Serialisierungsmethode benötigen, können Sie Folgendes tun:

saveRDS(lin.model, file="lin.model.txt", ascii=TRUE) 

predict(readRDS("lin.model.txt"), newdata) 

##  1 
## 4.17622 

Die ascii=TRUE macht einen Text Hex-Darstellung des Objekts:

1f8b 0800 0000 0000 0003 ed5d c992 1cb9 
91bd e797 cc1c 9806 381c db51 36a6 c35c 
e61f 4a64 5153 3645 b255 2cb6 749a 6f1f 
5fb0 bcc8 ca62 4b1a 33f5 25da 8c6d 8848 
04fc f9f6 b004 10f5 870b 5d62 afa9 964b 
4cb1 71b8 d456 2f91 2e99 8afc f421 5e5b 
e510 73ef 9770 0d35 17aa 3d5f 6290 5fe3 
850a c59c 2ef9 f2f5 e1cb e3f7 4bd4 27c6 
bd18 2fff f69f 5f5f 1f5f 3e3e fef2 faef 
f36e bdfc f5e1 e9f5 e9eb 9f2f 94d9 4554 
1112 ae39 84dc 63d7 2287 de7a b2bb a975 
... (lots more) 

, die an Orten gespeichert werden kann, wo Binärblob nicht.

Wenn Sie eine lesbare Text-Serialisierungsmethode benötigen, ist das Einreichen der oben genannten Verbesserungsanforderung sehr hilfreich.

+0

Danke, es funktioniert. Ich habe eine Verbesserungsanfrage in GitHub eingereicht. –

Verwandte Themen