2010-11-08 88 views
7

我正在尝试使用R来分析大型DNA序列文件(fastq文件,每个数千兆字节),但这些文件的标准R接口(ShortRead)必须一次读取整个文件。这不适合内存,所以会导致错误。是否有任何方法可以一次读取几条(千条)行,将它们填充到内存文件中,然后使用ShortRead从该内存文件中读取?有没有办法在R中读写内存中的文件?

我正在寻找像Perl的IO ::标量,为R.

+0

其实,我不认为我可以解决我的问题:有问题的函数(readFastq)想要一个文件*名称*,所以我不确定是否可以传递任意连接。 – 2010-11-08 17:36:40

+0

我认为你要找的是在这篇文章的答案中描述:http://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r/1820610我特别像sqldf解决方案一样。 – 2011-09-15 14:56:07

回答

2

看起来ShortRead即将添加一个“FastqStreamer”类,它可以实现我想要的功能。

2

我不知道很多关于R,但你必须看看mmap package

1

好了,我不知道readFastq接受比文件以外的东西......

但是,如果它可以,其他的功能,你可以使用R功能的管道()打开一个UNIX连接,那么你可以用unix命令头部和尾部以及一些管道的组合来完成这个任务。

例如,让线90到100,你用这个:

head file.txt -n 100 | tail -n 10 

所以你可以读取数据块文件。

如果必须,您可以随时使用这些unix实用程序创建临时文件,然后使用shortRead读取它。这是一个痛苦,但如果它只能采取一个文件,至少它是有效的。

1

顺便说一句,一般如何在R中执行内存中文件(如Perl的IO :: Scalar)的答案是textConnection函数。但令人遗憾的是,ShortRead软件包无法处理textConnection对象作为输入,因此尽管我在将文件以小块读入内存中的文件(这些文件随后一点一点地被解析)表达的想法对于许多应用程序来说当然是可能的,但由于ShortRead不喜欢textConnections,因此不适用于特定的应用程序。所以解决方案是上面描述的FastqStreamer类。

相关问题