2013-01-12 92 views
4

我是R的新手,但我意识到它会扼杀“大”文件。我正在尝试读取一个200MB的数据文件。我已经尝试了它的CSV格式,并将其转换为制表符分隔txt,但在这两种情况下,我用完我的4GB的RAM加载文件之前。将大文件读入R

R正常情况下会使用4GB或内存来加载200MB文件,或者文件可能有问题,并且导致R除了读取数据外,还会继续读取一堆虚无?

+6

1)200MB远不在“大”附近。 2)您使用什么函数来读取文件(并且您是否阅读了该函数的帮助页面)? 3)文件中有哪些数据? 4)您是否搜索过SO(我通过搜索“[r]大文件”发现了几个相关的问题/答案)。 5)你读过[R Data Import/Export](http://cran.r-project.org/doc/manuals/R-data.html)吗? –

+1

并向我们提供可重现的代码片段,以显示您的问题。一个200 MB的csv文件通常不应占用4 GB。 –

+0

我尝试使用基本的方法来读取文件,因为它是我所知道的:read.table(“myfile.csv”,header = TRUE)或用于我使用read.table(“myfile.txt”, sep =“\ t”,header = TRUE)。有200多列主要有单个字母或小数字。可悲的是,中间有一大群变种,这些变种都是稀疏的。 – Oliver

回答

9

?read.table

Less memory will be used if colClasses is specified as one of the six atomic vector classes. 

...

Using nrows, even as a mild over-estimate, will help memory usage. 

使用这两种论点。

确保您为您的数字数据正确指定numeric。看到这里:Specifying colClasses in the read.csv

而且不要低估预算。

如果您正在运行64位R,则可以尝试32位版本。它将使用较少的内存来保存相同的数据。

另请参阅这里:Extend memory size limit in R

+4

为什么你提到'nrows',但不是'colClasses'?将数字作为字符串存储非常低效,调用'type.convert'会导致不必要的重复。你怎么知道'read.table'是最好的函数? OP甚至没有告诉你他们的数据是什么样子的(例如,如果它只是一个矩阵,'scan'可能是更好的解决方案)。 –

+0

@JoshuaUlrich好点。谢谢。 –

+0

read.table(“myfile.csv”,header = TRUE) – Oliver