r - 将多个文件加载到 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
任何帮助将非常感激。
解决方案
感谢@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
正常工作。
推荐阅读
- sql - 如何在 Presto SQL 中按 X 分钟增量分组?
- x86 - 使用 AVX2 是否可以在字数组上实现更快的 LZCNT 处理?
- c# - 通过单击另一个 Droplist.for 填充 Droplist.for
- ckeditor5 - 运行示例时 ckeditor-react 'getAttributes' 错误
- java - Scanner 类中的 next() 与 nextLINE()
- shell - 循环两个不同的 CURL 请求?
- javascript - React children 是一个函数:如何正确定义 TypeScript 类型?
- java - 如何使用 JAXB 为同一类实现 2 个不同的输出?
- python - 如何在 python 中与多个用户一起使用 Kerberos?
- python-3.x - 使用一些可选参数传递互斥参数时可用的选项