首页 > 解决方案 > 将多个文件加载到 R > 2GB

问题描述

我一直在尝试使用过去与我合作的几种不同方法将许多文件上传到 R 中,但由于某种原因不在这里。我在论坛上阅读了许多帖子,这些帖子解决了可以做到这一点的不同方法,但似乎没有一个对我的问题有用;我想文件更大。

以下是我尝试过的不同方法:

files <- list.files(pattern = ".txt")

listOfFiles <- list()

for(i in 1:length(files)){
 listOfFiles[[i]] <- read.table(files[i], header = TRUE, sep = "\t", stringsAsFactors = FALSE)
}

但是,当我运行它时,我的计算机只是冻结并停止工作。这使我相信这可能是内存问题,但是我尝试将其更改memory.limit()为大约 12000,但它仍然无法运行。

这里有一篇帖子解决了手头的问题:快速读取非常大的表作为数据框。它不同的原因是我知道我上传的脚本可以正常工作,只是不能用于总计超过 2GB 的许多文件。我相信这是一个内存问题,因为当我再次运行它时,我得到了错误:

Error: cannot allocate vector of size 7.8 Mb 

我已经阅读了论坛上使用 的其他帖子lapply,所以我想尝试一下,但是它也未能正常工作。

这是我所做的:

listo <- lapply(files, read.table)

另一方面,这运行,但是当我尝试打开列表listo时,它给了我错误:

Error: object 'listo' not found

任何帮助将非常感激。

标签: rloopsmemoryloading

解决方案


感谢@TinglTanglBob 帮助您解决这个问题。

这是我解决它的方法:

memory.limit(size = 12000)
files <- list.files(pattern = ".txt")
YFV_list <- list()

for(i in 1:length(files)){
  YFV_list[[i]] <- fread(files[i], sep = "\t", header = TRUE, stringsAsFactors = FALSE)
}

所以我假设是内存问题。fread从包中使用Data.table有助于克服这个问题,因为它不能在早期使用read.table. 但是,无论如何都需要对其进行一些调整才能使其memory.limit正常工作。


推荐阅读