2016-05-15 55 views
2

是否有一些可以將預測模型和其他複雜對象轉換爲JSON的良好R包?我從這個例子中的線性迴歸模型:R - 將R模型序列化爲JSON

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

我想它的地方序列eruption.lm模型作爲JSON存儲或發送到一些外部系統,後來反序列化,做預測。 我曾嘗試與jsonlite R package

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

predict(lin.model, newdata) 

然而,jsonlite不能處理複雜的對象 - 反序列化的模型預測返回一個錯誤:

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

有一些更好的封裝,可以序列化/反序列化對象。

回答

2

你只需要幫它記住terms環境:

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

predict(lin.model, newdata) 

##  1 
## 4.17622 

我在http://github.com/jeroenooms/jsonlite/issues

或者超過該文件作爲增強請求,您可以使用本機R二進制序列化:

saveRDS(lin.model, "lin.model.rds") 

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

##  1 
## 4.17622 

除非你絕對需要文本序列化的方法,在這種情況下你可以這樣做:

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

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

##  1 
## 4.17622 

ascii=TRUE使對象的文本十六進制表示:

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) 

可以存儲在地方的二進制塊不能。

如果您需要可讀的文本序列化方法,則提交上述建議的增強請求是非常有用的方法。

+0

謝謝,它的工作原理。我已經在GitHub中提交了增強請求。 –