2017-08-06 23 views
0

次のコードがあります。繰り返しごとに行列を保存する

for(i in 1:100) 
{ 
    for(j in 1:100) 
    R[i,j]=gcm(i,j) 
} 

gcm()ijの値に基づいて数を返すので、Rすべての値を有するいくつかの機能です。しかし、この計算には多くの時間がかかります。私のマシンのパワーは何度か中断されたので、やり直す必要がありました。誰か助けてもらえますか?安全のために、どのように毎回Rをどこかで保存することができますか?どんな助けも高く評価されます。

答えて

0

あなたはR-ワークスペースを保存したい場合は(TOTOにワークスペースを保存するために第2の1、あなたのオブジェクトのサブセットを保存するために最初に使用します)?saveまたは?save.imageを見てみましょう。

編集したコードは

がベクトルまたは配列またはリストを返し、私は?apply機能を試して助言する多くの時間を取って、あなたのコードについて

for(i in 1:100) 
{ 
    for(j in 1:100) 
    R[i,j]=gcm(i,j) 
    save.image(file="path/to/your/file.RData") 
} 

、のようになります。配列または行列のマージンに関数を適用して得られた値のうちの1つまたは複数を含む。

アプローチ - がsnowfallを考慮遅い試みが再びある場合

あなたが欲しいgmcがために、それぞれあなたが行と列の各組み合わせのためにそれを適用すること、細胞、実行されるように

R = 100; # number of rows 
C = 100; # number of columns 
M = expand.grid(1:R, 1:C); # Cartesian product of the coordinates 
# each row of M contains the indexes of one of R's cells 
# head(M); # just to see it 

# To use apply we need gmc to take into account one variable only (that' not entirely true, if you want to know how it really works have a look how at ?apply) 
# thus I create a function which takes into account one row of M and tells gmc the first cell is the row index, the second cell is the column index 
gmcWrapper = function(x) { return(gmc(x[1], x[2])); } 

# run apply which will return a vector containing *all* the evaluated expressions 
R = apply(M, 1, gmcWrapper); 

# re-shape R into a matrix 
R = matrix(R, nrow=R, ncol=C); 

座標あなたがパラレルコンピューティングを使用してapply - 接近に従うことを可能にするパッケージ。 snowfall使い方の紹介は、あなたは、ファイル内の各計算結果を保存するためにsaveRDS()機能を使用することができ、特定の

関連する問題