作者greatjus (jus)
看板R_Language
标题[问题] 回圈中相同名称都覆盖了还是记忆体不足
时间Thu Aug 4 12:38:01 2016
使用经验: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://webptt.com/cn.aspx?n=bbs/R_Language/M.1470285484.A.7A9.html
1F:→ celestialgod: R的物件回收没你想像中聪明 08/04 18:17
2F:→ celestialgod: 虽然覆盖掉同名物件,可是你在做binding他会先做 08/04 18:18
3F:→ celestialgod: 复制的动作 08/04 18:18
4F:→ celestialgod: 尽量不要在for里面做bind,建议都用sapply+do.call 08/04 18:18
5F:→ celestialgod: 有完整可以跑的范例 在写给你看 08/04 18:19
6F:→ Wush978: rbind的问题吧 08/05 22:04
7F:→ clickhere: assign才会复制.biding不会.没必要在loop里做rm or gc. 08/05 22:23