全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
39003 36
2013-03-21
今天遇到一个朋友问的问题,关于R处理大数据时out of memory的问题,于是发现原来很多时候大家别没有合理的使用R中最基本的函数。在这里算是提示一下,没有什么高水平的东西,就是值得一些问题。欢迎大家补充和扩展:
该问题是:由于读入的数据较大,无法进行后续操作了。即使用rm()删掉了不相关的东西,依然不起作用。我发现原来问题在于这个同事在rm后没有进行garbage collection。

我们可以通过ls()看work space中有什么变量。
通过object.size()看每个变量占多大内存。
通过memory.size()查看现在的work space的内存使用
通过memory.limit()查看系统规定的内存使用上限。如果你认为现在的内存上限不够用,可以通过memory.limit(newLimit)更改到一个新的上限。 注意,在32位的R中,封顶上限为4G,你无法在一个程序上使用超过4G (数位上限)。这种时候,可以考虑使用64位的版本。

对于一些很大的但无用的中间变量,养成清理的习惯:可以使用rm(object)删除变量,但是记住,rm后记得使用gc()做Garbage collection,否则内存是不会自动释放的,相当于你没做rm.





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-3-21 16:25:15
难怪每次清除变量之后,内存还有东西,找到症结所在了
可是为什么设置了上限之后,内存还是不能超过1g呢,奇怪
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-3-21 20:51:01
kk22boy 发表于 2013-3-21 16:25
难怪每次清除变量之后,内存还有东西,找到症结所在了
可是为什么设置了上限之后,内存还是不能超过1g呢, ...
这个有可能跟你本机的虚拟内存设置有关。可能我所说的4G也不一定适用于所有电脑。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-3-22 08:26:11
谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-3-22 10:20:26
good.Thanks
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-4-29 09:08:20
你好,我在做数据模拟的时候也遇到了这个问题,下面是我的程序,当我把变量个数设为5000时,程序就会报告:错误,无法分配大小为95.4M的矢量。这是怎么回事,我用了rm(),gc(),还是不管用啊,像这样应该怎么解决呢

rm(list=ls())
library(MASS)
library(stats)
library(utils)
library(graphics)
library(splines)
library(survival)
library(penalized)
library(MASS)
library(SIS)
library(lattice)
library(Matrix)

gendata <- function(n,cor,beta)
  {
        #design matrix
        X=mvrnorm(n,rep(0,p),cor)

        #observed survivial time
        #set.seed(seed+1000)
        logS=log(matrix(runif(n,0,1),n,1)) #log[S(t)]
        T=-logS/(exp(X%*%beta))

      #censored time
        C <- rexp(n, rate =0.1)
       
        #survival time and state
        time <- apply(cbind(C,T),1,min)
        stat <- as.numeric(T<C)

        #combin data
        return(list("X"=X,"surv"=Surv(time,stat),"time"=time,"stat"=stat))
}

n=100  #sample size
sample=2 #simulation times
#beta vector
beta1<-c(1.8762,-2.2746,1.9497,-1.9826,1.956277,-2.2077,1.9929,-2.4966,1.8992,-1.9458)
beta2<-rep(0,4990)
beta<-matrix(c(beta1,beta2))
beta11<-which(beta!=0)
p <- length(beta)
d <- p-length(beta[beta==0])

#generate correlation matrix ,第一种方案,相关系数为零,即个自变量间相互独立
cor=matrix(1,p,p)
for (i in 1:p)
{
        for (j in 1:p)
                {
               if(i!=j)
                 {
                cor[i,j]=0 #correlation matrix
                      }
            }
}

i=1
for (i in 1:sample){
if (i>1 ){rm(simcox,opt1pf,lambda,coxlasso,opt1,fit2,lambda22,fit1,lambda11,pen)
              gc()}#删除上一次循环中的结果,避免影响下一次
###############generate data
simcox <-gendata(n,cor,beta)
attach(simcox)
#Cox: lasso
opt1pf <- profL1(surv, penalized = X, fold = 10, data=simcox)
lambda <- opt1pf$lambda[opt1pf$cvl==max(opt1pf$cvl)]
coxlasso <- penalized(surv, penalized = X, data=simcox, lambda1=lambda)
}
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群