2

我正在一个大型数据集上运行一些矩阵代数。最外层循环的每次迭代都会填充一行,其中包含分配给 64,797 行的两个不同向量。我正在为外部循环打印一个计数器来检查进度。这可能并不理想。根据任务管理器的说法,R 仍在工作,并且使用了大量的内存和处理器。但是,R 控制台没有响应,我只能在最后读到我至少到第 31,000 行(有滚动空间,但我无法向下滚动查看打印的最后一个数字)。我不知道程序是否“挂起”(不再迭代外循环)并且我在浪费时间等待,或者我是否应该坚持下去。机器已经运行了几天。鉴于程序的结构,我可以结束进程并从填充的最后一行重新开始。然而,如果我结束该过程,我会丢失我正在填充的向量中先前分配的数据吗?那会很糟糕,因为我必须从头开始。这是下面的代码。最终目标是称为:save.trace 和 save.trace2 的向量。

for (i in 1:nrow(coor.cal)){
print(i)
   for (j in 1:nrow(coor.cal)){
      dist<-( (coor.cal[i,1]-coor.cal[j,1])^2 + (coor.cal[i,2]-coor.cal[j,2])^2)^.5        
      #finding distances between observations
      w[j]<-exp(-0.5*((dist/bw)^2))#computing weight matrix for observation i
      if (dist>bw){w[j]<-0}


   }

   for (k in 1:27){
      xv<-xmat[ ,k]
      xtw[k, ]<-xv*w
   }
   xtwx<-xtw%*%xmat
   xtwx.inv<-ginv(xtwx)
   xtwx.inv.xtw<-xtwx.inv%*%xtw


   xrow<-xmat[i, ]
   temp<-xrow%*%xtwx.inv.xtw
   save.trace[i]<-temp[i]
   save.trace2[i]<-sum(temp*temp)
}
4

2 回答 2

1

这是一个更好的例子。

saved <- 0
for(i in 1:100)
{
  saved <- i
  Sys.sleep(0.1)
}

运行此代码,并在接下来的 10 秒内(循环完成之前)的某个时间按 Escape。

看看 的值saved。应该大于0,说明你的进度已经被存储了。

于 2012-07-27T12:06:45.510 回答
0

我没有记忆冒险进行实验来回答我的问题。我刚刚借了另一台机器,试了一下,确实你可以结束一个进程并仍然保留以前存储的信息。我以前没有遇到过这个问题。我试图删除我的问题,但不能。我会留下这个,以防它帮助别人。

于 2012-07-27T00:37:42.340 回答