【问题标题】:Loading multiple files into R > 2GB将多个文件加载到 R > 2GB
【发布时间】:2019-08-06 14:50:48
【问题描述】:

我一直在尝试使用过去与我合作的几种不同方法将许多文件上传到 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

任何帮助将不胜感激。

【问题讨论】:

  • 也许从包 Data.table 中的 fread 可以在这里提供帮助?它应该比 read.table 更快。
  • 在再次更改内存限制后我正在尝试 fread,如果它有效,我会告诉你!不过,谢谢大家的时间。
  • @TinglTanglBob 它已与 fread 合作!非常感谢。
  • 如果您想通了,最好将其发布为答案(您可以回答自己的问题,甚至接受自己的答案),而不是作为问题的编辑

标签: r loops memory loading


【解决方案1】:

感谢@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)
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 2018-12-31
    • 2012-07-25
    • 2012-02-02
    • 2021-07-18
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多