【问题标题】:Error when serializing an mgcv gam model with jsonlite使用 jsonlite 序列化 mgcv gam 模型时出错
【发布时间】:2020-04-14 09:45:06
【问题描述】:

我想用 jsonlite 以稳健的方式“序列化”一个 mgcv gam 模型,以便以后在 rpy2 中使用它。

(我所说的健壮的意思:当使用 python 时,我认为 Pickle 并不健壮,因为在每次 Python 更新之后,序列化管道都会中断。这就是为什么我更喜欢将 json 格式与 jsonlite 一起使用,这在我看来更多健壮(但我可能错了)。)

jsonlite 与 RJSONIO 相比做得相当好:mgcv 模型的每个细节都被正确序列化,除了一个名为 Environnement 的子变量:

inspection of the initial model b

inspection of the deserialized model new_b

您可以在前两张图片中看到:Environnement: namespace:stats 变为 Environnement: R_GlobalEnv

我不知道该如何处理。欢迎每一个建议。

这是一个最小的可重现示例:


> library(mgcv)
> n = 40
> x <- 1:n/n  # data between [0, 1]
> x2 <- 1:n/n  # data between [0, 1]
> x3 <- 1:n/n  # data between [0, 1]
> mu <- exp(-400*(x-.6)^2)+5*exp(-500*(x-.75)^2)/3+2*exp(-500*(x-.9)^2)
> y <- mu+0.5*rnorm(n)
> b <- gam(y~s(x)+te(x2, x3))
> 
> library(jsonlite)
> json_str = serializeJSON(b)
> new_b = unserializeJSON(json_str)
> mat     <- predict.gam(b    , type = "terms")
> new_mat <- predict.gam(new_b, type = "terms")
Error in if (object$by != "NA") { : 
  valeur manquante là où TRUE / FALSE est requis
> 

【问题讨论】:

    标签: r rpy2 gam jsonlite mgcv


    【解决方案1】:

    jsonlite 存在问题:“NA”被序列化为 NA。 (问题不是环境变量变化引起的)

    快速修复:

    new_b$smooth[[2]]$by = "NA"
    new_b$smooth[[1]]$by = "NA"
    new_mat <- predict.gam(new_b, type = "terms")
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 2020-03-21
      • 2020-10-07
      相关资源
      最近更新 更多