【问题标题】:Merge command give Error: cannot allocate vector of size 54.2 Gb合并命令给出错误:无法分配大小为 54.2 Gb 的向量
【发布时间】:2021-12-04 07:00:59
【问题描述】:

我想在一个数据库中合并两个不同长度的大型数据库的 2 列,问题是合并命令给了我错误

错误:无法分配大小为 54.2 Gb 的向量”。

我在具有 32GB RAM 的 Windows 10 上运行。 我真的不明白为什么最终的数据库这么大,两个起始数据库是 350k 行之一和 50k 行之一。如果我使用 SPSS 手动合并这两个列,则生成的数据库大约为 2MB。我需要自动化这个过程,所以手动操作是不可能的。

dbA<-MatrixLarge$varAlpha  

dbB<-MatrixSmall$varBeta


# creating the column id for dataframe 1
dbA = cbind("id"=rownames(dbA),dbA)

# creating column id for dataframe 2
dbB = cbind("id"=rownames(dbB),dbB)

#merging two dataframe
dbFinal<-merge(dbA,dbB,all=T)

【问题讨论】:

  • 我已经将 r 中的内存限制增加到 100GB,但 id 没有帮助
  • 尝试使用data.table 包。来自其文档:“n 快速聚合大数据(例如 RAM 中的 100GB)、快速有序连接、快速添加/修改/删除列......”。这里是merge function 形式data.table,这里是包vignette
  • 尝试指定merge(dbA, dbB, by = "id", all = TRUE)
  • 我怀疑问题出在数据库的类别以及变量的形状上。是否可以共享一些示例数据,例如数据库的前 50 行?我在下面添加了一个简单的可重现示例,它可以正常工作:
  • @mhovd 成功了!!非常感谢,真的

标签: r memory merge


【解决方案1】:

您可能是跨多个列合并,尝试使用merge(dbA, dbB, by = "id", all = TRUE) 只合并id,否则结果会太大,如内存错误所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    相关资源
    最近更新 更多