所以我想我不太明白内存是如何工作的。我已经遇到了同一段代码在本周晚些时候变慢的问题(使用相同的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)
meanStorer肯定很大,但它是预先分配的,所以我不确定为什么循环随着时间的推移而减慢。如果我清除我的工作区并再次运行此代码,它将启动与最后几次计算一样慢!我正在使用Rstudio(如果重要的话)。这里还有我的一些系统信息
这是在使用x的预分配之前的toc图(即在循环中使用x=runif(50)
)
这是使用x预分配后的toc图(即在循环中使用x[]=runif(50)
)
是不是做了我认为做的事情?当我清理工作区时,什么东西在引擎盖下?
使用最新版本的R(3.1.0)更新:,即使将N增加到N = 3e8,问题也不再存在(注意R不允许向量太大)比这个)
虽然修复只是将R更新到最新版本是非常不满意的,因为我似乎无法弄清楚版本2.15中存在问题的原因。知道造成这些问题的原因仍然很好,所以我将继续开放这个问题。
答案 0 :(得分:3)
正如您在更新的问题中所述,高级答案是因为您使用旧版本的R带有错误,因为使用最新版本的R(3.1.0),问题不再存在。< / p>