[問題] 迴圈中相同名稱都覆蓋了還是記憶體不足

看板R_Language作者 (jus)時間9年前 (2016/08/04 12:38), 編輯推噓0(007)
留言7則, 3人參與, 最新討論串1/1
使用經驗:2年,還OK [問題] 我在使用R將資料存成不同檔案 首先是我有一筆大資料 A 我已經預先把 A 切割成 a1,a2,a3...,a140 再來是我寫迴圈,讓資料自動讀入、寫出,但是碰到問題是迴圈j 在一開始j=1到5時,都跑得很快,但是等j比較大之後就跑很慢 我有打開工作管理員看,比較發現每次回圈 都會使得R在"記憶體"的部分佔更大的比例, 後面甚至會佔到70%電腦記憶體以上。 我的疑問是,我回圈內所有的名稱,都是相同的名稱,應該下一次迴圈 都會覆蓋掉前一次迴圈物件才對, 不應該每跑一次迴圈,佔更多的記憶體阿? [MY CODE] library(data.table) for(j in 0:34) { code@#$ rm(list=ls(all=TRUE)) } 裡面的 code@#$= 讀取 連續的4筆資資料 b1=a(j*4+1) b2=a(j*4+2) b3=a(j*3+3) b4=a(j*4+4) #相當於j=0時讀取 a1,a2,a3,a4 B=rbind(b1,b2,b3,b4) 寫成B之後我有再刪減掉一些不需要的欄或列,以及加入一些新的變項 加入的變數我舉個例子,因為我怕記憶體會不足跟這個有關 Disease =cbind(Disease1 ,Disease2 ,...,Disease29) Medicine=cbind(Medicine1,Medicine2,...,Medicine23) 最後是把加入的變數跟刪減後小很多的B合併再一起存成一個text檔 Final=cbind(B,Disease,Medicine) write.table(Final,file = paste0('C:/users/data',j+1,'.txt')) #相當於每個迴圈對應存成1個data #data1到data34 想請問有碰過類似問題的人怎麼解決呢? 我也有google過R memory,很多都是在討論rm()和gc() 但是我看不太懂gc()...... 想請有經驗的人幫幫我 不論你是誰,真的非常謝謝你的分享 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 120.126.86.221 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1470285484.A.7A9.html

08/04 18:17, , 1F
R的物件回收沒你想像中聰明
08/04 18:17, 1F

08/04 18:18, , 2F
雖然覆蓋掉同名物件,可是你在做binding他會先做
08/04 18:18, 2F

08/04 18:18, , 3F
複製的動作
08/04 18:18, 3F

08/04 18:18, , 4F
盡量不要在for裡面做bind,建議都用sapply+do.call
08/04 18:18, 4F

08/04 18:19, , 5F
有完整可以跑的範例 在寫給你看
08/04 18:19, 5F

08/05 22:04, , 6F
rbind的問題吧
08/05 22:04, 6F

08/05 22:23, , 7F
assign才會複製.biding不會.沒必要在loop裡做rm or gc.
08/05 22:23, 7F
文章代碼(AID): #1NeiQiUf (R_Language)
文章代碼(AID): #1NeiQiUf (R_Language)