当我使用以下R代码时,
model_glm=glm(V1~. , data=xx,family="binomial");
save(file="modelfile",model_glm);
modelfile的大小与数据一样多,在我的情况下为1gig。如何删除model_glm结果中的数据部分,因此我只能保存一个小文件。
答案 0 :(得分:9)
在致电model = FALSE
时设置glm
可能会阻止model.frame
被退回。同时设置y = FALSE
将阻止返回响应向量。 <{1}}是默认设置,可防止返回x = FALSE
。
此组合应缩小glm对象的大小。
当然,您也可以使用model.matrix
或标准错误
coef(model_glm)
答案 1 :(得分:6)
我遇到过这个问题,我在生产过程中将GLM作为R的一部分运行,GLM的大小大大减慢了我的速度。我发现我需要杀死的不只是$data
。 Here是我的帖子,下面是一个例子。
> object.size(sg)
96499472 bytes
> sg$residuals <- NULL
> sg$weights <- NULL
> sg$fitted.values <- NULL
> sg$prior.weights <- NULL
> sg$na.action<- NULL
> sg$linear.predictors <- NULL
> sg$fitted.values <- NULL
> sg$effects <-NULL
> sg$data <- NULL
> object.size(sg)
3483976 bytes
> sg$qr$qr <- NULL
> object.size(sg)
79736 bytes
答案 2 :(得分:1)
object.size()
具有误导性,因为它忽略了环境属性。
如果要评估真实大小,请使用:
length(serialize(model_glm, NULL))
除了存储的数据外,如果你想显着减小你的glm的大小:
rm(list=ls(envir = attr(model_glm$terms, ".Environment")),
envir = attr(model_glm$terms,
".Environment"))
这来自详细的article
答案 3 :(得分:0)
您可以在保存之前将模型对象中的数据设为NULL。我做了一个快速测试,仍然产生了预测。
model_glm$data <- NULL