将多个文件加载到R> 2GB

时间:2019-03-15 13:47:54

标签: r loops memory loading

我一直尝试使用过去使用过的几种不同方法将许多文件上传到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,但仍然无法运行。

此处有一个帖子,其中解决了当前的问题:Quickly reading very large tables as dataframes。之所以与众不同,是因为我知道我上传的脚本可以正常工作,只是在很多文件中总容量不超过2GB。我相信这是一个内存问题,因为当我再次运行它时,出现了错误:

Error: cannot allocate vector of size 7.8 Mb 

我已经在论坛上阅读了其他使用lapply的帖子,因此以为我可以尝试一下,但是它也无法正常工作。

这是我所做的:

listo <- lapply(files, read.table)

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

Error: object 'listo' not found

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

感谢@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都需要进行一些调整。