有没有办法在R中读写内存文件?

时间:2010-11-08 16:40:39

标签: r file-io memory-management large-files in-memory

我正在尝试使用R来分析大型DNA序列文件(fastq文件,每个文件几千兆字节),但这些文件的标准R接口(ShortRead)必须立即读取整个文件。这不适合内存,因此会导致错误。有什么方法可以一次读取几(千)行,将它们填入内存文件,然后使用ShortRead从内存文件中读取?

我正在寻找像Perl的IO :: Scalar这样的东西,用于R。

4 个答案:

答案 0 :(得分:2)

我对R不太了解,但你看过mmap package吗?

答案 1 :(得分:2)

ShortRead很快就会添加一个“FastqStreamer”类来完成我想要的任务。

答案 2 :(得分:1)

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

但是如果它可以,对于其他函数,你可以使用R函数pipe()来打开一个unix连接,那么你可以使用unix命令head和tail以及一些管道的组合来做到这一点。

例如,要获得90到100行,请使用:

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

所以你只需要以块的形式阅读文件。

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

答案 3 :(得分:1)

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