我在一个独特的 R 会话中用脚本构建了 18 个模型。 由于每个模型都是经过相当长的时间的步骤选择过程的结果,因此我使用脚本末尾的函数
.Rdata
将 18 个最终模型保存为 save
文件。
现在,几天后,我想加载这些模型并继续处理它们。 因此,我想在全新的 R 会话中
load
它们,但是,在我加载所有模型之前,我收到如下消息:
无法分配 XXMb 的向量
考虑到当我首先创建这些模型时,它们都同时存在于内存中,直到我保存它们(显然加上当时 R 会话中的其他对象),为什么现在我无法加载它们都在同一个空的 R 会话中?
每个模型的大小在 680,000 到 710,000 KB 之间,总共 11Gb(包括所有模型)。
补充资料:
mppm
object from the package spatstat
基于 glm, glmm, or gam.知道为什么会发生这种情况以及如何解决这个问题吗?
谢谢
简答: 拟合模型包含对其他数据的交叉引用,这些数据不能轻易保存到文件和从文件中恢复。
长答案:任何类型的合身模型(包括标准
lm
、glm
以及spatstat
包模型ppm
和kppm
)包含对一个或多个environment
的引用实际上包含用于拟合模型的数据。
本质上,
environment
是对存在于 R 会话中某处并由 R 系统本身管理的列表(数据对象的命名列表)的指针或引用。
如果
m
是您刚刚拟合的模型,那么environment(terms(m))
和environment(formula(m))
可能包含这样的数据(尝试像ls(envir=environment(terms(m)))
这样的东西来查看它们包含什么)。
这是一个节省存储空间的重要机制,因为模型对象
m
只需要包含指向环境的引用或指针,而不是它的内容。同样object.size(m)
不包括这些引用环境的contents的内存大小,只包括引用指针的大小
我不知道将拟合模型保存在文件中时会发生什么,但我们(
spatstat
作者)不推荐这样做,因为这些交叉引用要么丢失,要么整个环境必须删除-引用并保存在文件中。听起来后者可能会发生在您的情况下,然后系统会阻止尝试立即重新加载所有这些数据。