我收到的消息是:
cannot allocate vector of size 215.2 Mb
215.2对我来说似乎并不那么重要,尤其是当我看到的示例在10 Gb的平流层中时。
以下是我要完成的工作:
Combined<-merge(x=SubjectsYOY,y=o2017,by="subjectkey",all.x=TRUE)
一个非常基本的左联接。
SubjectsYOY拥有28,202,411条带有16列的记录。 o2017年有109,850条记录和94列。
完成此操作后,我还需要进行三遍非常相似的合并。
我试图通过将对象保存到计算机上的.rda文件,关闭R,然后首先加载.rda来大大减少内存负载。显然没有用。另外,尝试避免删除列-处理这么多记录时,也许有一个更宽容的命令而不是合并?
还,提前按subjectkey对两个数据框的大小进行排序会有所帮助吗?
在尝试完成此操作时,我已将五个数据帧加载到内存中。以下是一些有关计算机状态的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运行或其他?不管这将发生什么。
再次感谢您!
答案 0 :(得分:0)
我曾经遇到过类似的情况,那是由于将文本合并为因素引起的。我通过将因素变成字符来解决它。