2013-01-12 187 views
4

我是R的新手,但我意識到它會扼殺「大」文件。我正在嘗試讀取一個200MB的數據文件。我已經嘗試了它的CSV格式,並將其轉換爲製表符分隔txt,但在這兩種情況下,我用完我的4GB的RAM加載文件之前。將大文件讀入R

R正常情況下會使用4GB或內存來加載200MB文件,或者文件可能有問題,並且導致R除了讀取數據外,還會繼續讀取一堆虛無?

+6

1)200MB遠不在「大」附近。 2)您使用什麼函數來讀取文件(並且您是否閱讀了該函數的幫助頁面)? 3)文件中有哪些數據? 4)您是否搜索過SO(我通過搜索「[r]大文件」發現了幾個相關的問題/答案)。 5)你讀過[R Data Import/Export](http://cran.r-project.org/doc/manuals/R-data.html)嗎? –

+1

並向我們提供可重現的代碼片段,以顯示您的問題。一個200 MB的csv文件通常不應占用4 GB。 –

+0

我嘗試使用基本的方法來讀取文件,因爲它是我所知道的:read.table(「myfile.csv」,header = TRUE)或用於我使用read.table(「myfile.txt」, sep =「\ t」,header = TRUE)。有200多列主要有單個字母或小數字。可悲的是,中間有一大羣變種,這些變種都是稀疏的。 – Oliver

回答

9

?read.table

Less memory will be used if colClasses is specified as one of the six atomic vector classes. 

...

Using nrows, even as a mild over-estimate, will help memory usage. 

使用這兩種論點。

確保您爲您的數字數據正確指定numeric。看到這裏:Specifying colClasses in the read.csv

而且不要低估預算。

如果您正在運行64位R,則可以嘗試32位版本。它將使用較少的內存來保存相同的數據。

另請參閱這裏:Extend memory size limit in R

+4

爲什麼你提到'nrows',但不是'colClasses'?將數字作爲字符串存儲非常低效,調用'type.convert'會導致不必要的重複。你怎麼知道'read.table'是最好的函數? OP甚至沒有告訴你他們的數據是什麼樣子的(例如,如果它只是一個矩陣,'scan'可能是更好的解決方案)。 –

+0

@JoshuaUlrich好點。謝謝。 –

+0

read.table(「myfile.csv」,header = TRUE) – Oliver