【问题标题】:Left_join: Error: cannot allocate vector of size "small" MbLeft_join:错误:无法分配大小为“小”Mb 的向量
【发布时间】:2018-08-28 16:35:09
【问题描述】:

我正在处理非常大的数据框,其中一个极端的数据框包含大约 300.000 行和 1.500 个变量。因此,在处理这些数据帧时,我有时会收到错误:

Error: cannot allocate vector of size x.x Gb

这主要意味着我必须将我的代码分成更小的步骤,或者必须完全改变我的方法。

目前我正在做几个选择,left_join 看起来像这样:

#Subsetting the main dataframe
df2 <- select(df1, matchcode, x1, x2, x3)
#Joining variables from a third dataframe
df2 <- df2 %>% left_join(select(df3, matchcode, y1, y2, y3), by="matchcode")

选择部分完美。然而奇怪的是,我现在在使用 left_join 时遇到这些错误,其中无法分配的数量非常小:

Error: cannot allocate vector of size 2.6 Mb
Error: cannot allocate vector of size 4.0 Mb
Error: cannot allocate vector of size 2.6 Mb

是否还有其他问题可能导致这些我不知道的错误,或者我的代码中是否存在错误?

【问题讨论】:

    标签: r select dplyr left-join


    【解决方案1】:

    自从发布这个问题以来,我做了一些研究。我首先认为错误与我工作区中对象的数量(大小)有关,但事实并非如此。

    对我自己的问题最重要的答案(请随时详细说明)是,无法分配的向量的大小不一定能说明操作对内存的作用。

    事实证明,其中一个错误是由于我试图对两个巨大的数据集进行多对多连接,从而产生了错误:

    Error: cannot allocate vector of size 140.4 Mb
    

    其他联接是一对多的(这确实导致错误显着减少,请参阅原始帖子)。我已经能够通过使用 data.table 解决方案来加入这些数据框;

    library(data.table)
    df1 <- merge(df1, df2, by= "matchcode", all.x = TRUE, allow.cartesian=TRUE)
    

    对于多对多连接,我折叠了其中一个数据集,因此连接变成了一对多。我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 2019-04-04
      • 2012-06-10
      • 1970-01-01
      相关资源
      最近更新 更多