我想将一个3.96 GB的制表符分隔的值文件加载到R,并且我的系统中有8个RAM。我如何将此文件加载到R上进行一些操作。
我尝试library(data.table)
加载数据
但我收到此错误消息(错误:无法分配大小为965.7 Mb的向量)
我也用此代码尝试过fread
,但是它也不起作用:花了很多时间,最后显示了一个错误。
as.data.frame(fread(file name))
答案 0 :(得分:4)
如果我是你,我可能会
1)再次尝试输入fread
代码,不要输入错字(最初缺少右括号):
as.data.frame(fread(file name))
2)尝试通过指定要读取的行数来部分读取文件。这可以在read.csv
和fread
中使用nrow
参数来完成。通过读取少量的行,可以在执行其他任何操作之前检查并确认文件实际可读。有时文件格式错误,可能有一些特殊字符,错误的行尾字符,转义或其他一些需要首先解决的问题。
3)看一下具有bigmemory
功能的read.big.matrix
软件包。此外,ff
软件包具有所需的功能。
或者,我可能还会尝试“跳出框框”:我是否需要文件中的所有数据?如果没有,我可以使用cut
或awk
进行预处理,以删除不必要的列。我是否绝对需要将其作为一个文件读取并将所有数据同时存储在内存中?如果没有,我可以分割文件或使用readLines
..
ps。 this帖子很好地介绍了该主题。
pps。感谢@Yuriy Barvinchenko对fread
答案 1 :(得分:1)
您正在读取数据(将其存储在内存中),然后将其存储为data.frame(将创建另一个副本)。而是使用
将其直接读取到data.frame中fread(file name, data.table=FALSE)
此外,运行垃圾回收也不会受到损害。
gc()
答案 2 :(得分:1)
根据我的经验以及@Oka的答案:
fread()
具有nrows=
参数,因此您可以读取前10行。 fread()[]
之后设置条件和字段列表通过这种方式,我可以处理5GB的csv文件。