我想在一份包含2个预测变量和5000万行数据的大型数据集上运行`lm()`。这个分析是在只有10GB空间存储数据的远程服务器上运行的。我从数据中取出了一万行进行了测试,结果生成的对象大小为2GB+。
我仅需要`lm()`函数返回的"lm"类对象来生成模型的摘要统计信息(`summary(lm_object)`)和进行预测(`predict(lm_object)`)。
我曾尝试过使用`lm`函数的`model`、`x`、`y`和`qr`选项,将它们全部设置为`FALSE`后可以减少38%的模型大小。
但是
library(MASS)
fit1=lm(medv~lstat,data=Boston)
size1 <- object.size(fit1)
print(size1, units = "Kb")
# 127.4 Kb bytes
fit2=lm(medv~lstat,data=Boston,model=F,x=F,y=F,qr=F)
size2 <- object.size(fit2)
print(size2, units = "Kb")
# 78.5 Kb Kb bytes
- ((as.integer(size1) - as.integer(size2)) / as.integer(size1)) * 100
# -38.37994
但是
summary(fit2)
# Error in qr.lm(object) : lm object does not have a proper 'qr' component.
# Rank zero or should not have used lm(.., qr=FALSE).
predict(fit2,data=Boston)
# Error in qr.lm(object) : lm object does not have a proper 'qr' component.
# Rank zero or should not have used lm(.., qr=FALSE).
显然,我需要保留qr=TRUE
,这将使对象大小仅比默认对象减少9%。
fit3=lm(medv~lstat,data=Boston,model=F,x=F,y=F,qr=T)
size3 <- object.size(fit3)
print(size3, units = "Kb")
# 115.8 Kb
- ((as.integer(size1) - as.integer(size3)) / as.integer(size1)) * 100
# -9.142752
如何在不将大量不必要的信息存储在内存和存储器中的情况下将“lm”对象的大小最小化?
lm
可能导致2GB的对象。你的数据集中有多少列? - Hong Ooilm
,并操作了你的大数据集吗? - Hong Ooi