Wet*_*ent 29 memory performance r
所以我觉得我不太明白内存是如何在R中工作的.我遇到了同样的代码在本周晚些时候变慢的问题(使用相同的R会话 - 有时甚至在我清除工作区时) .我试图开发一个玩具问题,我认为在使用大型物体时会重现我一直在观察的"减速效果".请注意,下面的代码有点内存密集(不要盲目地运行此代码而不调整n和N以匹配您的设置可以处理的内容).请注意,在开始看到这种减速模式(可能更长)之前,您可能需要大约5-10分钟.
N=4e7 #number of simulation runs
n=2e5 #number of simulation runs between calculating time elapsed
meanStorer=rep(0,N);
toc=rep(0,N/n);
x=rep(0,50);
for (i in 1:N){
if(i%%n == 1){tic=proc.time()[3]}
x[]=runif(50);
meanStorer[i] = mean(x);
if(i%%n == 0){toc[i/n]=proc.time()[3]-tic; print(toc[i/n])}
}
plot(toc)
Run Code Online (Sandbox Code Playgroud)
meanStorer肯定很大,但它是预先分配的,所以我不确定为什么循环随着时间的推移而减慢.如果我清除我的工作区并再次运行此代码,它将启动与最后几次计算一样慢!我正在使用Rstudio(如果重要的话).这里还有我的一些系统信息
这是在使用x的预分配之前的toc图(即x=runif(50)
在循环中使用)
这是使用x的预分配后的toc图(即x[]=runif(50)
在循环中使用)
是吗?我没做我认为它正在做的事情?当我清理工作区时,什么东西在引擎盖下?
更新:使用最新版本的R(3.1.0),即使将N增加到N = 3e8,问题也不再存在(注意R不允许向量太大)
虽然修复只是将R更新到最新版本是非常不满意的,因为我似乎无法弄清楚为什么版本2.15中存在问题.知道导致它们的原因仍然很好,所以我将继续保持这个问题的开放性.
正如您在更新的问题中所述,高级答案是因为您使用的是带有错误的旧版本 R,因为使用最新版本的 R (3.1.0),问题不再存在。
归档时间: |
|
查看次数: |
3979 次 |
最近记录: |