我有一個體面的大小89M行,3.7Gb的data.table。鑰匙就位,所以一切都正確設置。但是,當我根據列的值刪除行時,我遇到了問題。內存使用情況只是通過屋頂!刪除數據表中的行和尖峯的內存使用情況
只是爲了記錄我已經閱讀了關於這個的其他帖子,但他們並沒有真正幫助很多。另外,我正在使用RStudio,我很確定它並不理想,但它在實驗時會有所幫助,但是我注意到R控制檯中的相同行爲。我正在使用Windows。
讓我發佈(關於去除行從一個類似的問題採取)約1e6x100
rm(list=ls(all=TRUE)) #Clean stuff
gc(reset=TRUE) #Call gc (not really helping but whatever..)
dimension=1e6 #let's say a million
DT = data.table(col1 = 1:dimension)
cols = paste0('col', 2:100) #let these be conditions as columns
for (col in cols){ DT[, col := 1:dimension, with = F] }
DT.m<-melt(DT,id=c('col1','col2','col3'))
創造一個非常大的data.table的例子好了,所以現在我們有一個data.table與97M行,約1.8Gb。這是我們的出發點。
讓我們刪除值列(熔化後)的所有行, 4
DT.m<-DT.m[value!=4]
最後一行需要大量的內存!在執行此行之前,在我的PC中,內存使用量約爲4.3Gb,在執行該行之後,它將達到6.9Gb!
這是刪除線條的正確方法,對吧? (只是檢查)。有沒有人遇到過這種行爲?
我想循環所有參數,並保持我感興趣的行,在另一個data.table,但不知何故,我懷疑這是一種正確的工作方式。
我期待着您的幫助。
感謝 尼科斯
您只是將1e6 x 1 data.table轉換爲1e6 x 100數據表。 – 2014-10-30 16:54:51
@BonddedDust也許問題不清楚。我將重新提示,但問題是爲什麼刪除行會增加內存使用量。 1e6x100 data.table很好。 – Nikos 2014-10-30 17:47:35
那麼,代碼建議我說,你不是隻創建100倍的數據表,而是100次循環。我想你應該嘗試更小的測試案例來了解真正創建的內容。 – 2014-10-30 17:51:10