我正在嘗試使用R來分析大型DNA序列文件(fastq文件,每個數千兆字節),但這些文件的標準R接口(ShortRead)必須一次讀取整個文件。這不適合內存,所以會導致錯誤。是否有任何方法可以一次讀取幾條(千條)行,將它們填充到內存文件中,然後使用ShortRead從該內存文件中讀取?有沒有辦法在R中讀寫內存中的文件?
我正在尋找像Perl的IO ::標量,爲R.
我正在嘗試使用R來分析大型DNA序列文件(fastq文件,每個數千兆字節),但這些文件的標準R接口(ShortRead)必須一次讀取整個文件。這不適合內存,所以會導致錯誤。是否有任何方法可以一次讀取幾條(千條)行,將它們填充到內存文件中,然後使用ShortRead從該內存文件中讀取?有沒有辦法在R中讀寫內存中的文件?
我正在尋找像Perl的IO ::標量,爲R.
看起來ShortRead即將添加一個「FastqStreamer」類,它可以實現我想要的功能。
我不知道很多關於R,但你必須看看mmap package?
好了,我不知道readFastq接受比文件以外的東西......
但是,如果它可以,其他的功能,你可以使用R功能的管道()打開一個UNIX連接,那麼你可以用unix命令頭部和尾部以及一些管道的組合來完成這個任務。
例如,讓線90到100,你用這個:
head file.txt -n 100 | tail -n 10
所以你可以讀取數據塊文件。
如果必須,您可以隨時使用這些unix實用程序創建臨時文件,然後使用shortRead讀取它。這是一個痛苦,但如果它只能採取一個文件,至少它是有效的。
順便說一句,一般如何在R中執行內存中文件(如Perl的IO :: Scalar)的答案是textConnection
函數。但令人遺憾的是,ShortRead軟件包無法處理textConnection對象作爲輸入,因此儘管我在將文件以小塊讀入內存中的文件(這些文件隨後一點一點地被解析)表達的想法對於許多應用程序來說當然是可能的,但由於ShortRead不喜歡textConnections,因此不適用於特定的應用程序。所以解決方案是上面描述的FastqStreamer類。
其實,我不認爲我可以解決我的問題:有問題的函數(readFastq)想要一個文件*名稱*,所以我不確定是否可以傳遞任意連接。 – 2010-11-08 17:36:40
我認爲你要找的是在這篇文章的答案中描述:http://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r/1820610我特別像sqldf解決方案一樣。 – 2011-09-15 14:56:07