【问题标题】:R running very slowly after loading large datasets > 8GB加载大于 8GB 的​​大型数据集后,R 运行速度非常慢
【发布时间】:2019-03-19 15:45:12
【问题描述】:

考虑到加载数据集后它的运行速度有多慢,我无法在 R 中工作。这些数据集总计约 8GB。我在 8GB RAM 上运行,并调整了 memory.limit 以超过我的 RAM,但似乎没有任何效果。另外,我使用data.table 包中的fread 来读取这些文件;只是因为read.table 不会运行。

在论坛上看到解决相同问题的类似帖子后,我尝试运行gctorture(),但无济于事。

R 运行速度太慢,以至于我什至无法检查我上传的数据集列表的长度,无法View 或在这些数据集上传后进行任何基本操作。

我已尝试以“片段”的形式上传数据集,因此 1/3 的总文件超过 3 次,这似乎使导入部分的运行更加顺畅,但在 R 速度有多慢方面没有任何改变在此之后运行。

有没有办法解决这个问题?任何帮助将不胜感激。

感谢大家的宝贵时间。

【问题讨论】:

  • 你真的需要所有的列和所有的行吗?在加载到 R 之前可能是子集? mydata <- fread("cut -f1-4 myFile.txt") ?
  • @zx8754 现在正在查看包,感谢您的输入。这是一个很好的观点。事实上我可以删除几列,会试试这个
  • 所以我一直在查看 ff 包,并尝试使用包中的一些功能上传文件。我一直在尝试使用read.delim.ffdf 命令,但我总是得到同样的错误:“scan() 期望'a logical',得到'TRBC1 * 00(15)..”我在网上查了一下,没有找到任何东西解决这个问题。你过去处理过这个错误吗?

标签: r memory import


【解决方案1】:

出现问题是因为 R 将完整的数据集加载到 RAM 中,当您尝试 View 您的数据时,这主要会使系统停止运行。

如果它是一个非常庞大的数据集,首先要确保数据只包含最重要的列和行。可以通过您对问题的领域和世界知识来识别有效列。您也可以尝试消除缺失值的行。

完成后,根据您的数据大小,您可以尝试不同的方法。一种是通过使用像bigmemoryff 这样的包。 bigmemory 例如,创建一个指针对象,您可以使用它从磁盘读取数据,而无需将其加载到内存中。

另一种方法是通过并行(隐式或显式)。 MapReduce 是另一个对处理大型数据集非常有用的软件包。

有关这些的更多信息,请查看 rpubs 上的 this 博客帖子和来自 SO 的 this 旧但黄金帖子。

【讨论】:

  • 必须将cut 数据作为@zx8754 并且您在bash 中建议,然后在bigmemory 包中使用read.big.matrix 上传文件,但它有效!谢谢您的帮助。对于面临同样问题的任何人,请阅读此小插曲:stat.yale.edu/~mjk56/temp/bigmemory-vignette.pdf
猜你喜欢
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
相关资源
最近更新 更多