我正在尝试使用R来分析大型DNA序列文件(fastq文件,每个文件几个GB),但是标准的R接口(ShortRead)必须一次性读取整个文件。这不适合内存,因此会导致错误。有没有办法可以一次读取几千行,将它们塞入内存中的文件,然后使用ShortRead从该内存文件中读取?
我需要类似Perl的IO :: Scalar的东西,用于R。
我正在尝试使用R来分析大型DNA序列文件(fastq文件,每个文件几个GB),但是标准的R接口(ShortRead)必须一次性读取整个文件。这不适合内存,因此会导致错误。有没有办法可以一次读取几千行,将它们塞入内存中的文件,然后使用ShortRead从该内存文件中读取?
我需要类似Perl的IO :: Scalar的东西,用于R。
看起来ShortRead即将添加一个名为“FastqStreamer”的类,它可以做我想要的事情。
嗯,我不知道readFastq是否接受除文件以外的其他内容...
但是如果可以的话,在其他函数中,您可以使用R函数pipe()打开一个Unix连接,然后可以使用一些管道和Unix命令head和tail的组合来实现。
例如,要获取第90到100行,可以使用以下命令:
head file.txt -n 100 | tail -n 10
所以你可以分块读取文件。
如果必须的话,你总是可以使用这些Unix工具来创建一个临时文件,然后用shortRead读取它。虽然有点麻烦,但如果只能接受文件,至少它能够工作。
textConnection
函数。不幸的是,ShortRead包无法处理textConnection对象作为输入,因此,虽然我在问题中表达的将文件分成小块读入内存文件,然后逐位解析的想法对许多应用程序来说肯定是可行的,但对于我的特定应用程序来说却不行,因为ShortRead不喜欢textConnections。因此,解决方案是上面描述的FastqStreamer类。