2012-08-02 79 views
4

我想讀取一個大小低於110,000,000行和8列的ido文件。這些列由2個整數列和6個邏輯列組成。文件中使用分隔符"|"。我嘗試使用read.big.matrix,它花了很長時間。我也試過dumpDf,它用完了RAM。我試過ff,我聽說這是一個很好的軟件包,我正在努力解決錯誤。如果我能以某種方式閱讀,我想對此表做一些分析。如果任何人有任何建議,將是偉大的。 親切的問候, 洛爾肯在r中的大文本文件中讀取

+6

看看[this](http://stackoverflow.com/a/1820610/986817)。 – Ryogi 2012-08-02 16:46:42

+1

你能提供一個文件樣本(第5-10行)嗎? – 2012-08-02 16:57:54

+1

包含ff的代碼和錯誤 – mdsumner 2012-08-02 20:57:56

回答

8

謝謝你的一切建議。我設法弄清楚爲什麼我不能讓錯誤工作。我會給你所有的答案和建議,所以沒有人可以再犯我愚蠢的錯誤。

首先,給我的數據中包含一些錯誤,所以我一開始就註定要失敗。直到有一位同事在另一個軟件中遇到它時,我才意識到這一點。在包含整數的列中有一些字母,這樣當read.table.ff包試圖讀取數據集時,它會以某種方式感到困惑或者我不知道。儘管我得到了另一個數據樣本,但有1600萬行和8列有正確的條目,並且工作得很完美。我跑的代碼如下,歷時約30秒,以閱讀:

setwd("D:/data test") 
library(ff) 
ffdf1 <- read.table.ffdf(file = "test.ido", header = TRUE, sep = "|") 

謝謝大家的時間,如果你對回答任何問題隨時問,我會盡我所能來幫助。

2

你真的需要所有的數據爲您的分析?也許你可以聚合你的數據集(比如說從分鐘值到日平均值)。這個聚合只需要完成一次,並且希望可以分塊完成。通過這種方式,您需要將所有數據一次加載到內存中。

可以使用scan來完成塊的讀取,重要參數是skipn。或者,將您的數據放入數據庫中並以這種方式提取塊。你甚至可以使用plyr包中的函數並行運行塊,例如我的this blog post