R - 除了 ls() 中的对象之外的内存分配
R - Memory allocation besides objects in ls()
我已经使用 data.table 加载了相当大的数据集。然后我想使用以下形式的说明添加大约 30 列:
DT[, x5:=cumsum(y1), by=list(x1, x2)]
DT[, x6:=cummean(y2), by=x1]
在某些时候我开始 "warnings" 像这样:
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() 的唯一输出是我的 data.table,第一个错误后的对象大小是 5303.1 Mb。
我在 Windows 64 位机器上 运行 R 64 位并且有 8 GB RAM。当我收到警告时,这 8 GB RAM 中只有 80% 在使用中。其中 R 使用 5214.0 Mb(奇怪,因为 table 比这个大)。
我的问题是,如果 R 使用的唯一 RAM 是 5303.1 Mb,而我仍然有大约 2 Gb 的可用内存,为什么我会收到 R 已达到 8 Gb 限制的错误消息,还有什么我可以做的吗反对吗?如果没有,还有什么其他选择?我知道我可以使用 Bigmemory,但我将不得不重写我的整个代码,并且会失去 data.table 提供的甜蜜的引用修改。
问题是操作需要的 RAM 超出了对象本身占用的空间。您可以验证 windows 是否正在使用页面文件。如果是的话,你可以尝试增加它的大小。 http://windows.microsoft.com/en-us/windows/change-virtual-memory-size
如果失败,您可以尝试 运行 Lubuntu 的实时环境 linux 以查看其内存开销是否足够小以允许操作。 http://lubuntu.net/
最终,我怀疑您将不得不使用 bigmemory 或类似的东西。
我已经使用 data.table 加载了相当大的数据集。然后我想使用以下形式的说明添加大约 30 列:
DT[, x5:=cumsum(y1), by=list(x1, x2)]
DT[, x6:=cummean(y2), by=x1]
在某些时候我开始 "warnings" 像这样:
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() 的唯一输出是我的 data.table,第一个错误后的对象大小是 5303.1 Mb。 我在 Windows 64 位机器上 运行 R 64 位并且有 8 GB RAM。当我收到警告时,这 8 GB RAM 中只有 80% 在使用中。其中 R 使用 5214.0 Mb(奇怪,因为 table 比这个大)。
我的问题是,如果 R 使用的唯一 RAM 是 5303.1 Mb,而我仍然有大约 2 Gb 的可用内存,为什么我会收到 R 已达到 8 Gb 限制的错误消息,还有什么我可以做的吗反对吗?如果没有,还有什么其他选择?我知道我可以使用 Bigmemory,但我将不得不重写我的整个代码,并且会失去 data.table 提供的甜蜜的引用修改。
问题是操作需要的 RAM 超出了对象本身占用的空间。您可以验证 windows 是否正在使用页面文件。如果是的话,你可以尝试增加它的大小。 http://windows.microsoft.com/en-us/windows/change-virtual-memory-size
如果失败,您可以尝试 运行 Lubuntu 的实时环境 linux 以查看其内存开销是否足够小以允许操作。 http://lubuntu.net/
最终,我怀疑您将不得不使用 bigmemory 或类似的东西。