25

我正在处理一个大型数据框,并且遇到了 RAM 限制。此时,我可能需要使用磁盘上的序列化版本。有一些包可以支持内存不足操作,但我不确定哪一个适合我的需要。我更愿意将所有内容都保存在数据框中,因此该ff软件包看起来令人鼓舞,但仍然存在我无法解决的兼容性问题。

当您意识到您的数据已达到内存不足的规模时,首先要使用的工具是什么?

4

3 回答 3

28

你可能想看看这些包:

  • ff用于“平面文件”存储和非常有效的检索(可以执行 data.frames;不同的数据类型)
  • bigmemory用于 R 内存不足但仍在 RAM(或文件支持)中使用(只能做矩阵;相同的数据类型)
  • biglmlm()用于与和- 样式模型拟合的内存不足glm()模型。

还可以查看高性能计算任务视图。

于 2009-12-09T18:28:44.090 回答
1

我会说disk.frame是这类任务的不错选择。我是该软件包的主要作者。

与限制可以轻松处理的数据类型不同的是,它尝试“模仿”ff并提供用于操作数据的动词。bigmemorydata.framedplyr

于 2018-11-01T22:30:21.440 回答
0

如果您正在处理内存问题,您应该尝试以下步骤:

  1. 清除消耗 RAM 的附加进程。确保不要打开带有许多选项卡的浏览器,因为它们似乎会消耗大量 RAM。

  2. 完成第 1 步后,了解数据集文件的结构。为此,请使用read.csv(nrow=100)。通过这样做,您将了解什么是列和列结构。如果您发现任何列无用,请将其删除。

  3. 知道列结构(colclasses)后,您可以一次性导入整个数据框。

这是示例代码:

initial <- read.table("datatable.txt", nrows = 100)
classes <- sapply(initial, class)
tabAll <- read.table("datatable.txt", colClasses = classes)
  1. 使用 fread() 读取大型数据帧。

  2. 如果仍然不能解决问题,则将数据集分成两部分,将行数分成两个相等的部分,然后在应用降维技术后将它们合并。

我希望它有所帮助。

于 2018-01-05T18:00:48.103 回答