如何只读select从一个文件列到R? (`read.table`和`scan`之间的快乐媒介?)

我有一些非常大的分隔数据文件, 我只想处理R中的某些列,而不需要花费时间和内存为整个文件创build一个data.frame

我所知道的唯一select是read.table ,当我只想要几列或者scan ,这太浪费了。

有没有更好的select,无论是纯R或可能呼吁其他shell脚本进行列提取,然后使用扫描或read.table输出? (这导致了如何调用shell脚本并在R中捕获其输出的问题)。

有时我在制表符分隔的文件中有这样的数据:

 df <- read.table(pipe("cut -f1,5,28 myFile.txt")) 

这可以让cut做数据select,它可以做,而不需要使用太多的内存。

[不正确的纯R版本删除] – 请参阅只读为正确的纯R版本的有限数量的列 ,使用colClasses参数中的NULL read.table

一种可能是使用pipe()代替文件名,并使用awk或类似的filter只提取所需的列。

有关pipe和朋友的更多信息,请参阅help(connection)

编辑read.table()也可以为你做这个,如果你是非常明确的colClasses – 一个给定的列的NULL值跳过所有的列。 请参阅help(read.table) 。 所以我们有一个基地R的解决scheme,没有额外的软件包或工具。

我认为德克的做法是直接的,也是快速的。 我使用的替代方法是将数据加载到比read.table()加载速度快得多的sqlite中,然后只提取所需内容。 包sqldf()使这一切都很容易。 这里是一个链接到先前的堆栈溢出答案,给出了sqldf()的代码示例。

有一个包,colbycol,旨在做你正在寻找什么:

http://cran.r-project.org/web/packages/colbycol/index.html

这可能比你需要的要多,但是如果你使用的是非常大的数据集,那么你也可以看看HadoopStreaming包 ,它提供了一个使用Hadoop的map-reduce例程。