【发布时间】:2010-12-24 22:49:22
【问题描述】:
我正在处理一个大型数据框,并且遇到了 RAM 限制。此时,我可能需要使用磁盘上的序列化版本。有a few packages 支持内存不足操作,但我不确定哪一个适合我的需要。我更愿意将所有内容都保存在数据框中,因此ff 包看起来令人鼓舞,但仍然存在我无法解决的兼容性问题。
当您意识到您的数据已达到内存不足规模时,首先要使用的工具是什么?
【问题讨论】:
标签: r out-of-memory
我正在处理一个大型数据框,并且遇到了 RAM 限制。此时,我可能需要使用磁盘上的序列化版本。有a few packages 支持内存不足操作,但我不确定哪一个适合我的需要。我更愿意将所有内容都保存在数据框中,因此ff 包看起来令人鼓舞,但仍然存在我无法解决的兼容性问题。
当您意识到您的数据已达到内存不足规模时,首先要使用的工具是什么?
【问题讨论】:
标签: r out-of-memory
你可能想看看这些包:
lm() 和 glm() 样式模型拟合的内存不足模型。还可以查看High-Performance Computing 任务视图。
【讨论】:
如果您正在处理内存问题,您应该尝试以下步骤:
清除消耗 RAM 的附加进程。确保不要打开带有许多选项卡的浏览器,因为它们似乎会消耗大量 RAM。
完成第 1 步后,了解数据集文件的结构。为此,请使用 read.csv(nrow=100)。通过这样做,您将了解什么是列和列结构。如果您发现任何列无用,请将其删除。
一旦你知道了列结构(colclasses),你就可以一次导入整个数据框..
这里是示例代码:
initial <- read.table("datatable.txt", nrows = 100)
classes <- sapply(initial, class)
tabAll <- read.table("datatable.txt", colClasses = classes)
使用 fread() 读取大型数据帧。
如果仍然不能解决问题,则将数据集分成两部分,将行数分成相等的两部分,然后在应用降维技术后合并它们。
希望对你有帮助。
【讨论】:
我会说disk.frame 非常适合此类任务。我是包的主要作者。
与限制可以轻松处理的数据类型的ff 和bigmemory 不同,它尝试“模仿”data.frames 并提供dplyr 动词来操作数据。
【讨论】: