2

大規模なデータセットで行列代数を実行しています。最も外側のループの各反復は、64,797行に割り当てられた2つの異なるベクトルの1行に入力されます。進行状況を確認するために、外側のループの画面にカウンターを印刷しています。これは理想的ではないかもしれません。タスクマネージャーによると、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秒以内(ループが完了する前)にEscキーを押します。

の値を見てくださいsaved0進行状況が保存されたことを示す、以上である必要があります。

于 2012-07-27T12:06:45.510 に答える
0

私には、私の質問に答えるための実験の危険を冒す記憶がありませんでした。別のマシンを借りて試してみましたが、実際にプロセスを終了しても、以前に保存された情報を保持できます。私はこれまでこの問題に遭遇したことがありませんでした。質問を削除しようとしましたが、削除できませんでした。他の人に役立つ場合に備えて、これは残しておきます。

于 2012-07-27T00:37:42.340 に答える