7

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

我正在为 R 寻找类似 Perl 的 IO::Scalar 的东西。

4

4 回答 4

2

我对 R 了解不多,但你看过mmap 包吗?

于 2010-11-08T16:42:48.927 回答
2

看起来 ShortRead 很快就会添加一个“FastqStreamer”类来满足我的需求。

于 2012-06-21T19:01:37.030 回答
1

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

但是如果可以,对于其他功能,您可以使用 R 函数 pipe() 打开 unix 连接,然后您可以结合使用 unix 命令 head 和 tail 以及一些管道来执行此操作。

例如,要获取第 90 到 100 行,请使用以下命令:

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

因此,您可以分块读取文件。

如果必须,您可以随时使用这些 un​​ix 实用程序创建一个临时文件,然后使用 shortRead 将其读入。这很痛苦,但如果它只能获取一个文件,至少它可以工作。

于 2011-09-15T14:14:13.300 回答
1

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

于 2012-06-22T20:14:38.383 回答