【问题标题】:R - Serialize R models as JSON [closed]R - 将 R 模型序列化为 JSON [关闭]
【发布时间】:2016-05-15 09:51:21
【问题描述】:

是否有一些好的 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"

有没有更好的包可以序列化/反序列化对象。

【问题讨论】:

    标签: json r serialization jsonlite


    【解决方案1】:

    你只需要帮助它记住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)
    

    可以存储在二进制 blob 不能存储的地方。

    如果您需要可读文本序列化方法,提交上述建议的增强请求是最好的选择。

    【讨论】:

    • 谢谢,它有效。我已经在 GitHub 提交了增强请求。
    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2017-04-13
    相关资源
    最近更新 更多