Я хочу «сериализовать» надежным способом модель ggcv gam с jsonlite, чтобы позже использовать ее с rpy2.
(Что я имею в виду под надежным: при использовании python я считаю, что Pickle не является надежным, потому что после каждого обновления Python конвейер сериализации разрывается, поэтому я предпочитаю использовать формат json с jsonlite, который мне кажется более устойчивым (но я могу ошибаться).)
jsonlite выполняет довольно хорошую работу по сравнению с RJSONIO: каждая деталь модели mgcv корректно сериализуется, за исключением дополнительной переменной Environnement:
проверка исходной модели b
проверка десериализованной модели new_b
На предыдущих двух изображениях вы видите, что: Environnement: пространство имен: статистика становится 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
>