2013-09-26 27 views
5

我有一個700MB .dta塔塔2800萬周的觀察和14個變量使用memisc導入STATA .dta文件爲R

文件時,我嘗試使用我跑foreign's read.dta()函數來導入成R在我的8GB機器上沒有內存(頁面輸出非常快速地輸入GB)。

staph <- read.dta("Staph_1999_2010.dta") 

我找遍周圍和它聽起來像的更有效的替代方案將是使用Stata.file()函數從memisc package

當我打電話:

staph <- Stata.file("Staph_1999_2010.dta") 

我得到一個segfault:

*** caught segfault *** 
address 0xd5d2b920, cause 'memory not mapped' 

Traceback: 
1: .Call("dta_read_labels", bf, lbllen, padding) 
2: dta.read.labels(bf, len.lbl, 3) 
3: get.dictionary.dta(dta) 
4: Stata.file("Staph_1999_2010.dta") 

我找到Stata.file的文檔()難以跟上。

(1)我正在使用Stata.file()嗎?

(2)Stata.file()是否返回像read.dta()這樣的數據框呢? (3)如果我正確使用Stata.file(),我該如何解決我收到的錯誤?

+0

購買更多的內存。通常的經驗法則是,你需要3倍的內存作爲最大的對象,所以28 * 14 * 10 * 3 = 11760,所以你應該有16GB的生產炒鍋的大小的對象(考慮到系統的需要內存,可能會佔用幾個演出 –

+0

謝謝,我會考慮這些選項,但想弄清楚如何使用Stata.file() – ptjetty

+0

我也segfault當我使用一個100MB的dta文件 – ptjetty

回答

0

可以訪問Stata,將Std中的.dta文件導出爲.csv。

use "file.dta" 

export delimited using "file.csv", replace 

,然後導入作爲R使用read.csvdata.table::fread

其他的想法:

  • 考慮採樣位在Stata的Stata的
  • 塔塔compress使用sample數據通過改變類型嘗試一種無損壓縮(不
    知道它會節省很多用於該.csv和R雖然)。
  • 如果可能的話,通過將任何日期或字符串ID轉換爲整數來緊縮數據。
  • 所使用的雲實例一次性導入和初步清理,取樣或只保留重要組成部分
  • 得到更多的內存之前...