【问题标题】:R Merging Help - cannot allocate vector of size 215.2 MbR合并帮助-无法分配大小为215.2 Mb的向量
【发布时间】:2019-02-04 16:22:27
【问题描述】:

我收到的信息是:

cannot allocate vector of size 215.2 Mb

215.2 对我来说似乎并不大,尤其是当我看到的示例位于 10 Gb 的平流层时。

以下是我想要完成的:

Combined<-merge(x=SubjectsYOY,y=o2017,by="subjectkey",all.x=TRUE)

这是一个非常基本的左连接。

SubjectsYOY 有 16 列的 28,202,411 条记录。 o2017 有 109,850 条记录,共 94 列。

在完成此操作后,我还需要再进行 3 次非常相似的合并。

我试图通过将对象保存到我机器上的 .rda 文件,关闭 R,然后加载 .rda 来大大减少内存负载 - 第一件事。显然没有奏效。此外,尽量避免删除列 - 在处理这么多记录时,也许有一个更宽容的命令而不是合并?

另外,提前按主题键对两个数据帧的大小进行排序会有所帮助吗?

在我尝试完成此操作时,我有五个数据帧加载到我的内存中。下面是一些关于我的计算机发生了什么的 sessionInfo:

sessionInfo()

R version 3.4.3 (2017-11-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
loaded via a namespace (and not attached):
[1] compiler_3.4.3 plyr_1.8.4     tools_3.4.3    yaml_2.2.0     Rcpp_0.12.17

尾部内容如下:

所以我做了一些实验并查看了 memory.limit。

memory.limit()

自动设置为 32676。

现在我将其更改为:

memory.limit(326760+10000)

我的第一个大合并成功了!

现在我还有 3 个合并要进行。下一个是 o2018,它再次有 94 个独特的和新的列,需要添加到之前创建的内容中:16 + 94 和现在 + 94 列。太多了!

所以我在对内存管理了解不多的情况下再次尝试更改内存限制:

memory.limit(32676000+10000)

现在请注意那里的两个额外的零。但现在我又得到了同样的原始错误。

有人认为将这些多个合并合并为一个会有所帮助吗?代码是什么?这是最好的代码还是我应该尝试模拟 SQL 运行或其他什么?不管这需要发生什么。

再次感谢您!

【问题讨论】:

  • 您能否提供一些关于您的数据的见解?一个最小可重复的例子总是非常有帮助的。
  • 这里有大量的列要复制。为了您和社区的其他人,关于如何做的任何建议?它是字符串字段、整数和一些浮点数的广泛组合。谢谢。
  • 尝试将 R 更新到最新版本 3.5.1?另外,您是否尝试过使用每个表中的子集(比如 100 行)进行操作?
  • 如果操作成功了一个子集,那么这意味着它不是语法或类型匹配问题,而只是内存问题。您可以尝试使用data.table 进行连接,这可能会提高内存效率(不过我不确定)。否则,您可能需要启动 AWS EC2 实例或具有更多 RAM 的东西。您也可以运行gc() 来释放未使用的内存。
  • 另外,你的两个对象在内存中有多大?是否有可能您已经在加载这两个文件时就已经用尽了 RAM?

标签: r memory merge


【解决方案1】:

我曾经遇到过类似的情况,那是由于将文本合并到因素造成的。我通过将因素转化为字符来解决它。

【讨论】:

  • 所以我取得了一些进展,但我又陷入了停滞。请查看我上面帖子的结尾,看看我做了什么以及它再次喷出的地方。
猜你喜欢
  • 2011-09-06
  • 1970-01-01
  • 2021-08-31
  • 2015-10-25
  • 2019-04-04
相关资源
最近更新 更多