R -除了ls()中的对象之外的内存分配



我使用data.table加载了一个相当大的数据集。然后,我想添加大约30列使用指令的形式:

DT[, x5:=cumsum(y1), by=list(x1, x2)]
DT[, x6:=cummean(y2), by=x1]

在某些时候,我开始得到像这样的"警告":

1: In structure(.Call(C_objectSize, x), class = "object_size") :
Reached total allocation of 8072Mb: see help(memory.size)

我不时检查tracemem(DT)以确保没有复制。我得到的唯一输出是:

"<0000000005E8E700>"

我还检查ls()以查看哪些对象正在使用,并检查object.size()以查看对象分配了多少RAM。ls()的唯一输出是我的数据。第一次错误后的对象大小为5303.1 Mb。我使用的是64位Windows机器,运行64位R,内存为8gb。当我收到警告时,这些8 GB内存中只有80%在使用。其中R占用了5214.0 Mb(很奇怪,因为表比这个大)。

我的问题是,如果R使用的唯一RAM是5303.1 Mb,我仍然有大约2 Gb的空闲内存,为什么我会得到R已达到8 Gb限制的错误,我能做些什么?如果没有,还有其他选择吗?我知道我可以使用Bigmemory,但这样我就必须重写我的整个代码,并且会丢失数据的甜蜜引用修改。表提供。

问题是这些操作需要的内存超出了对象本身所占用的内存。您可以验证windows是否正在使用页面文件。如果是,你可以试着增加它的大小。http://windows.microsoft.com/en-us/windows/change-virtual-memory-size

如果失败,您可以尝试运行Lubuntu linux的实时环境,看看它的内存开销是否足够小以允许操作。http://lubuntu.net/

最后,我怀疑你将不得不使用bigmemory或类似的

最新更新