使用 glmmTMB 建模生成的建模对象在保存到 RDS 后由于其大小而变得难以处理。
为 lm 对象建议的另一个线程这个问题是由环境属性引起的,这些属性在保存这些对象时似乎是随手可得的,但当然这些建模对象的结构不同。
saveRDS 膨胀对象的大小
更新:在进行更多挖掘时,我发现了这个线程,其中似乎 saveRDS refhook 参数可能有助于防止将环境写入对象,但我不明白这个参数是如何工作的或如何构建重新挂钩功能。
这是一个可重现的小示例,演示了对象在将其保存到 RDS 后如何增长(大约 100 kb)。然而,在更大的模型中,我运行的大小从 2 MB 膨胀到超过 1 GB。
# 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
谢谢