2017-08-06 3 views
0

J'ai le code suivant.Matrice de stockage après chaque itération

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

gcm() est une fonction qui renvoie un nombre en fonction des valeurs de i et j et ainsi, R a toutes les valeurs. Mais ce calcul prend beaucoup de temps. La puissance de mon appareil a été interrompue plusieurs fois, ce qui m'a obligé à recommencer. Quelqu'un peut-il m'aider s'il vous plaît, comment puis-je sauver R quelque part après chaque itération, afin d'être en sécurité? Toute aide est grandement appréciée.

Répondre

0

Si vous souhaitez enregistrer l'espace de travail-R ont un regard sur ?save ou ?save.image (utilisez le premier à enregistrer un sous-ensemble de vos objets, la seconde pour enregistrer votre espace de travail dans toto).

Votre code édité devrait ressembler

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

A propos de votre code de prendre beaucoup de temps, je vous conseille d'essayer la fonction ?apply qui

Renvoie un vecteur ou un tableau ou d'une liste des valeurs obtenues en appliquant une fonction à des marges d'un tableau ou d'une matrice

Vous voulez gmc à exécuter pour-chaque cellule, ce qui signifie que vous voulez appliquer pour chaque combinaison de lignes et de colonnes coordonnées

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); 

Si le apply -Approche est à nouveau essayer lent compte tenu de la snowfall paquet qui vous permettra de suivre l'approche apply en utilisant l'informatique parallèle. Une introduction à l'utilisation snowfall se trouve in this pdf, regardez la page 5 et 6 en particulier