2016-03-15 23 views
4

我有不能或不想連接關係數據庫的用戶,但寧願使用導出到excel文件的數據。 從這些數據庫數據導出的記錄集可能變得相當大。 (我也出口到CSV文件)。如何使用openxlsx包中的R編寫100萬行Excel文件

我的問題是關於這個:Handling java.lang.OutOfMemoryError when writing to Excel from R

正如接受的這個問題的答案(或者更確切的說是第一條評論)中所推薦的那樣,我現在使用基於Rcpp的openxlsx包來從數據庫中導出一些視圖。 當輸出有〜67000行時,它可以工作,但它的確適用於而不是適用於較大的數據集(〜100萬行,〜20個參數,除幾個日期時間外的所有數字)。

openxlsx::write.xlsx(data, file = "data.2008-2016.xlsx") # 800000 rows 

Error: zipping up workbook failed. Please make sure Rtools is installed or a zip application is available to R. 
     Try installr::install.rtools() on Windows 

(我使用Linux的PC,和/ usr/bin中/ ZIP 提供給R)

我可以給openxlsx包更多的內存?或者設置一些可調選項以更好地處理大數據集?

對於openxlsx,有沒有像基於java的xlsx包的options(java.parameters = "-Xmx1000m")

openxlsx vignette沒有提及任何選項。但是也許有一些無證的方法或選項?(例如顯示進度條保存時)

在這一點上我這樣進行:關閉所有不必要的應用程序,重新啓動Rstudio,保持很少/沒有大的物體在全球環境中,查詢分貝左右,然後運行write.xlsx()。 對於這樣的「乾淨的石板」,它成功地將800000行數據集導出爲93MB-xlsx文件。

+2

Excel中有行限制... https://support.office.com/en-gb/article/Excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3 – cory

+0

@cory,感謝您鏈接到規範。我意識到存在侷限性,但我認爲它們更高;特別是我認爲「工作表大小」也受到「可用內存和系統資源的限制」,但這顯然是一種誤解。 (工作表大小限制爲1,048,576行16,384列...) – knb

+2

Excel 2007有65,536行的限制。那些日子很粗糙...... – cory

回答

5

你的問題不是內存。 openxlsx要求安裝RTools或類似的文件來保存更大的Excel文件。

我有同樣的問題和相同的錯誤,你剛纔看到昨天。下面是一個鏈接,Windows安裝程序:

https://cran.r-project.org/bin/windows/Rtools/index.html

以下網站進一步解釋要求:

https://www.r-project.org/nosvn/pandoc/openxlsx.html

+1

這是根據您的錯誤消息得出的正確答案。你需要一個與'openxlsx'兼容的'zip'版本。另見這裏。 https://www.r-project.org/nosvn/pandoc/openxlsx。html – TARehman

+0

我在Linux上。然而,RTools僅適用於Windows - 我沒有這麼說過,但隱式地寫了「'(/ usr/bin/zip」可用於R)「 - 所以這個答案不適用於我的用例。 Upvoted雖然 – knb

+0

感謝upvote儘管如此!想法1:有沒有可能是內存失效的壓縮工具?奇怪的是,你得到了「壓縮工作簿失敗」的消息。想法2:鑑於它與「乾淨的石板」一起工作,也許,您的機器沒有所需的可用內存。如果你觀察你的內存使用情況,那麼在運行你的R腳本時它是否會增加並增加上限? –

相關問題