我是R用戶,我經常發現我需要編寫需要對大數據集進行子集的函數(數以百萬計的行)。當我將這些功能用於大量觀察時,如果我不小心如何實現它,它可能會非常耗時。子集的最快方式 - data.table與MySQL
爲此,我有時使用data.table包,這比使用數據框的子集提供了更快的速度。最近,我開始嘗試使用像RMySQL這樣的包,將一些表推送到mysql,並使用該包運行SQL查詢並返回結果。
我發現混合性能改進。對於較小的數據集(百萬),似乎將數據加載到data.table並設置正確的按鍵可以加快子集化。對於較大的數據集(10到100萬),似乎向mysql發送查詢的速度會更快。
想知道是否有人瞭解哪種技術應該更快地返回簡單的子集或聚合查詢,以及這是否取決於數據的大小?我明白在data.table中設置鍵有點類似於創建索引,但除此之外,我沒有更多的直覺。
我知道其他一些人在這裏有更多的經驗,所以我會讓他們用實際答案來闡述它,但我懷疑你會想看看'sqldf'包,它完全符合你的描述,只有它在內存中創建表(我認爲),所以查詢可能運行得更快。 – joran
謝謝,喬蘭!我很想在大型表格中理解這一點。這都是猜測,但我得到的建議是,速度問題可能是由於內存管理/限制造成的。畢竟,在使用數據時。表,不是那些在內存中的表? – exl
事實上,對於大內存將成爲問題的數據,但我相信sqldf也可以使用磁盤數據庫。再一次,我沒有用太多,我提到它是因爲它的一個完整的軟件包圍繞着將數據推送到數據庫,執行sql然後將其返回給R的概念構建。 – joran