2013-10-18 51 views
1

我有一個6mil行的大文件,我試圖讀取塊中的數據進行處理,所以我沒有達到我的RAM限制。這裏是我的代碼(注意temp.csv只是41只記錄一個虛擬文件):Chunks中的read.table - 錯誤消息

infile <- file("data/temp.csv", open="r") 

headers <- as.character(read.table(infile, header = FALSE, nrows=1, sep=",", stringsAsFactors=FALSE)) 

while(length(temp <-read.table(infile, header = FALSE, nrows=10, sep=",", stringsAsFactors=FALSE)) > 0){ 
    temp <- data.table(temp) 
    setnames(temp, colnames(temp), headers) 
    setkey(temp, Id) 
    print(temp[1, Tags]) 
} 

print("hi") 

close(infile) 

一切順利,直到最後一次迭代。我得到這個錯誤信息:

Error in read.table(infile, header = FALSE, nrows = 10, sep = ",", stringsAsFactors = FALSE) : 
    no lines available in input 
In addition: Warning message: 
In read.table(infile, header = FALSE, nrows = 10, sep = ",", stringsAsFactors = FALSE) : 
    incomplete final line found by readTableHeader on 'data/temp.csv' 

大概這是因爲最後的迭代只有1行記錄和read.table是10?

所有數據實際上都是正確讀取的。令人驚訝的是,即使在最後一次迭代中,temp仍然會被轉換爲data.table。但是print("hi")之後的所有內容都不會被執行。我能做些什麼來解決這個問題嗎?

謝謝。

+2

如果你只需要運行'FREAD( 「數據/ temp.csv」 09月= '')'會發生什麼? – mnel

+0

@mnel即使使用read.table,我也可以加載整個數據集。問題是我在處理階段遇到RAM問題,因此'爲什麼我需要分解它。 – mchangun

回答

1

啊,明白了!

repeat{ 
    temp <-read.table(infile, header = FALSE, nrows=10, sep=",", stringsAsFactors=FALSE) 

    temp <- data.table(temp) 
    setnames(temp, colnames(temp), headers) 
    setkey(temp, Id) 
    print(temp[1, Tags]) 

    if (nrow(temp) < 10) break 
} 

print("hi") 

這仍然會產生警告消息,但沒有更多的錯誤:

Warning message: 
In read.table(infile, header = FALSE, nrows = 10, sep = ",", stringsAsFactors = FALSE) : 
    incomplete final line found by readTableHeader on 'data/temp.csv'