glmmTMB型号大小(带saveRDS)

glmmTMB型号大小(带saveRDS),r,glmmtmb,R,Glmmtmb,使用glmmTMB建模会生成建模对象,这些对象在保存到RDS后由于其大小而变得难以处理 为lm对象建议的另一个线程此问题源于保存这些对象时出现的环境属性,但当然这些建模对象的结构不同。 更新: 在进一步挖掘的过程中,我发现saveRDS refhook参数可能有助于防止将环境写入对象,但我不知道该参数是如何工作的,也不知道如何构造refhook函数 下面是一个小的可重复的示例,演示了对象在保存到RDS后是如何增长的(大约100KB)。然而,在更大的型号中,我运行的大小从2MB膨胀到超过1GB

使用glmmTMB建模会生成建模对象,这些对象在保存到RDS后由于其大小而变得难以处理

为lm对象建议的另一个线程此问题源于保存这些对象时出现的环境属性,但当然这些建模对象的结构不同。

更新: 在进一步挖掘的过程中,我发现saveRDS refhook参数可能有助于防止将环境写入对象,但我不知道该参数是如何工作的,也不知道如何构造refhook函数

下面是一个小的可重复的示例,演示了对象在保存到RDS后是如何增长的(大约100KB)。然而,在更大的型号中,我运行的大小从2MB膨胀到超过1GB

# data frame from dput
DF <- structure(list(loc = c("300", "300", "300", "300", "300", "300", 
                             "301", "301", "301", "301", "301", "302", "302", "302", "302", 
                             "302", "302", "303", "303", "304", "304", "304", "305", "305", 
                             "307", "307", "308", "308", "309", "309", "310", "310", "312", 
                             "313", "315", "317", "318", "319"), num_pts = c(100L, 100L, 100L, 
                                                                             100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 
                                                                             100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 
                                                                             100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 
                                                                             100L, 100L), n = c(0, 1, 1, 0, 5, 1, 7, 5, 4, 2, 15, 1, 0, 1, 
                                                                                                5, 5, 8, 4, 2, 5, 10, 6, 14, 10, 9, 10, 7, 10, 0, 0, 14, 16, 
                                                                                                0, 0, 6, 2, 10, 2), yr = structure(c(27L, 28L, 29L, 30L, 31L, 
                                                                                                                                     32L, 27L, 28L, 29L, 30L, 31L, 27L, 28L, 29L, 30L, 31L, 32L, 27L, 
                                                                                                                                     31L, 27L, 31L, 32L, 27L, 31L, 28L, 32L, 28L, 32L, 28L, 32L, 28L, 
                                                                                                                                     32L, 29L, 29L, 29L, 29L, 30L, 30L), .Label = c("1984", "1985", 
                                                                                                                                                                                    "1986", "1987", "1988", "1990", "1993", "1994", "1995", "1996", 
                                                                                                                                                                                    "1997", "1998", "1999", "2000", "2001", "2002", "2003", "2004", 
                                                                                                                                                                                    "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", 
                                                                                                                                                                                    "2013", "2014", "2015", "2016", "2017", "2018"), class = "factor"), 
                     var = c(154.341666666667, 154.341666666667, 154.341666666667, 
                             154.341666666667, 154.341666666667, 154.341666666667, 149.208333333333, 
                             149.208333333333, 149.208333333333, 149.208333333333, 149.208333333333, 
                             136.025, 136.025, 136.025, 136.025, 136.025, 136.025, 150.125, 
                             150.125, 169.375, 169.375, 169.375, 156.891666666667, 156.891666666667, 
                             148.716666666667, 148.716666666667, 150.533333333333, 150.533333333333, 
                             155.2, 155.2, 150.033333333333, 150.033333333333, 152.275, 
                             155.266666666667, 155.7, 149.358333333333, 146.925, 147.575
                     )), row.names = 1912:1949, class = "data.frame")

# form model
model <- as.formula("cbind(n, num_pts - n) ~ var + (1 | yr) + (1 | loc)")

# fit
fit <- 
  glmmTMB::glmmTMB(model,
                   family = "betabinomial",
                   data=DF)


pryr::object_size(fit)  # 530kb

saveRDS(fit, "fit.rds")

fit2 <- readRDS("fit.rds")

pryr::object_size(fit2) # 640kb
来自dput的数据帧
我知道你说“我不能提供一个可复制的例子”,但为什么不呢?您能否编写一个代码示例来模拟与您的问题具有相似维度的数据,以演示这种现象<代码>库(glmmTMB);m1感谢@BenBolker添加了一个小示例,展示了对象如何膨胀。