R(在Windows上为64位):如何解决代码中“无法分配大小为557.6 Mb的向量”错误

问题描述 投票:0回答:1

这是my earlier question的后续内容,关于如何在两个文本文件之间找到比较特定属性的方法。

多亏了我接受的答案,下面的代码可以在较小的数据集上运行(在我的系统上):

library(tidyverse, data.table)

con1  <- file("file1.csv", open = "r")
con2  <- file("file2.csv", open = "r")

file1 <- select(read.csv(con1, sep = "|", fill = F, colClasses = "character"),
                PROFILE.ID, USERID)

setDT(file1)

file2 <- select(read.csv(con2, sep = "|", fill = F, colClasses = "character"),
                PROFILE.ID, USERID)

setDT(file2)

full_join(file1, file2, by = "USERID") %>%
  filter(is.na(PROFILE.ID.x) | is.na(PROFILE.ID.y) |
                PROFILE.ID.x != PROFILE.ID.y)

close(con1)
close(con2)

问题:当R开始处理full_join函数时,它最终会因错误cannot allocate vector of size 557.6 Mb而停止。

环境:这是Windows 10操作系统上的64位R v.3.6.2,memory.limit()返回16222。我没有在R中加载任何其他对象,除了上面的代码加载的对象。

可能的原因:问题可能出在两个CSV文件大约有12万行和83列。

到目前为止我已经尝试过但未解决问题的内容:

  • 包括使用select()函数来删除不必要的列。
  • 包括使用data.table和setDT()来转换数据帧到数据表。
  • 已关闭具有可见用户界面的所有应用(Outlook,Google Chrome,Excel等)。

无论我尝试了什么,该错误始终指的是“ 557.6 Mb”。由于这是公司的笔记本电脑,目前我无法在此计算机上添加更多RAM。

问题:有没有一种方法可以分块加载文件或以其他方式(在重写代码中)来解决错误?

r csv difference
1个回答
0
投票

这是我的2美分:尝试'bigmemory'。

© www.soinside.com 2019 - 2024. All rights reserved.