超出R的内存限制(即使使用24GB RAM)

时间:2012-07-19 16:00:44

标签: r memory memory-management dataframe

我正在尝试合并两个数据帧:一个有33个变量的908450个观测值,另一个有2个变量的908450个观测值。

dataframe2 <-merge(dataframe1, dataframe2, by="id")

我已清除工作内存中的所有其他数据帧,并使用以下代码重置内存限制(对于具有24 GB RAM的全新桌面):

memory.limit(24576)

但是,我仍然收到错误Cannot allocate vector of size 173.Mb

有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:23)

要跟进我的评论,请使用data.table。我整理了一个与您的数据匹配的快速示例来说明:

library(data.table)

dt1 <- data.table(id = 1:908450, matrix(rnorm(908450*32), ncol = 32))
dt2 <- data.table(id = 1:908450, rnorm(908450))
#set keys
setkey(dt1, id)
setkey(dt2, id)
#check dims
> dim(dt1)
[1] 908450     33
> dim(dt2)
[1] 908450      2
#merge together and check system time:
> system.time(dt3 <- dt1[dt2])
   user  system elapsed 
   0.43    0.03    0.47 

因此合并不到1/2秒。我拍了一张前后截图,看着我的记忆。在合并之前,我使用了3.4演出的ram。当我合并在一起时,它跳到了3.7并且趋于平稳。我认为你很难找到更多的记忆或时间效率。

在: enter image description here

在:enter image description here

答案 1 :(得分:2)

据我所知,有三种解决方案:

  • 使用数据表
  • 使用交换内存(可在* nix机器上调整)
  • 使用抽样