[问题] 循环中相同名称都覆蓋了还是内存不足

楼主: greatjus (jus)   2016-08-04 12:38:01
使用经验: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()......
想请有经验的人帮帮我
不论你是谁,真的非常谢谢你的分享
作者: celestialgod (天)   2016-08-04 18:17:00
R的物件回收没你想像中聪明虽然覆蓋掉同名物件,可是你在做binding他会先做复制的动作尽量不要在for里面做bind,建议都用sapply+do.call有完整可以跑的范例 在写给你看
作者: Wush978 (拒看低质媒体)   2016-08-05 22:04:00
rbind的问题吧
作者: clickhere (It's time to go home.)   2016-08-05 22:23:00
assign才会复制.biding不会.没必要在loop里做rm or gc.

Links booklink

Contact Us: admin [ a t ] ucptt.com