为什么R随着时间的推移而减慢,当计算相同时?

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(如果重要的话).这里还有我的一些系统信息

  • 操作系统:Windows 7
  • 系统类型:64位
  • 内存:8GB
  • R版本:2.15.1($ platform得出"x86_64-pc-mingw32")

这是在使用x的预分配之前的toc图(即x=runif(50)在循环中使用)

在此输入图像描述

这是使用x的预分配后的toc图(即x[]=runif(50)在循环中使用)

在此输入图像描述

是吗?我没做我认为它正在做的事情?当我清理工作区时,什么东西在引擎盖下?

更新:使用最新版本的R(3.1.0),即使将N增加到N = 3e8,问题也不再存在(注意R不允许向量太大)

在此输入图像描述

虽然修复只是将R更新到最新版本是非常不满意的,因为我似乎无法弄清楚为什么版本2.15中存在问题.知道导致它们的原因仍然很好,所以我将继续保持这个问题的开放性.

Jus*_*ies 3

正如您在更新的问题中所述,高级答案是因为您使用的是带有错误的旧版本 R,因为使用最新版本的 R (3.1.0),问题不再存在。

  • 当我读到这个问题时,对我隐含的(诚然有点滑稽的)答案是:“因为你使用的是带有错误的旧版本 R” (2认同)