2011-05-05 7 views
-2
library(rgdal) 
my_asc = dir("~/Pulpit/dods/karol/TVDI113_121", 
      pattern=".asc", recursive=TRUE, full.names=TRUE) 
for (i in 1:length(my_asc)) { 
    r <- readGDAL(my_asc[i]) 
    z <- as.matrix(r) 
    vectordata[i] <- mean(z) 
    vectordatamax[i] <- max(z) 
    vectordatamin[i] <- min(z) 
    vectordev[i] <- sd(z, na.rm=TRUE) 
    hist(z) 
    png(filename="hist"+tostring(i)+".png") 
} 

Je tente d'apporter quelques modifications à cette boucle, mais cela ne fonctionne toujours pas (je travaille sous Rstudio) - quel fragment est incorrect?problème avec des boucles dans R

Je voudrais aussi utiliser un modèle plus compliqué (pour lister uniquement les fichiers qui contiennent à la fin de ce nom deux nombres), mais ajouter quelque chose comme: pattern="_??.asc" ne semble pas fonctionner.

Je voudrais ajouter une boucle supplémentaire pour obtenir la liste des dossiers (au lieu d'insérer manuellement des répertoires dans la variable my_asc), mais je n'ai pas Idea comment je peux le faire? Je ne sais pas, pourquoi ma façon de créer des vecteurs pour les valeurs moyennes, max, min et écart-type ne fonctionne pas ...

+0

essayer de débogage fonctionner sans une boucle complète, il suffit de faire un seul fichier, et pendant que vous y êtes divisé les trois questions – mdsumner

+0

navigateur 'mettre()' comme première ligne de boucle et exécuter la boucle. Vous êtes maintenant "à l'intérieur" de la boucle et vous pouvez voir toutes les variables au fur et à mesure de leur création, les changer, les tester et les tester ... –

+0

Il y a beaucoup de choses dans cette boucle. Qu'est-ce que ** exactement ** ne fonctionne pas? Vous avez une erreur - qu'est-ce qu'il dit? Les résultats ne sont pas ce que vous attendez - donc ce que vous attendez? Vous pouvez éditer votre question pour ajouter plus d'informations. Pour l'instant -1. – Marek

Répondre

2

Par où commencer. . .

Vous voulez probablement na.rm = TRUE pour chacun des paramètres mean, max et min, et vous devrez entrer TRUE correctement pour sd. L'hist (z) devrait venir après le png (nom de fichier, ...) et cela devra être suivi d'un dev.off() (au moins).

Vous ne pouvez pas coller ensemble des chaînes avec "+" dans R, utilisez paste().

vectordata <- vectordatamax <- vectordatamin <- vectordev <- numeric(length(my_asc)) 
for (i in seq_along(my_asc)) { 
    r <- readGDAL(my_asc[i]) 
    ## as.matrix is not necessary, as the band values are accessible directly 
    ##z <- as.matrix(r) 
    z <- r[[1]] 
    vectordata[i] <- mean(z, na.rm=TRUE) 
    vectordatamax[i] <- max(z) 
    vectordatamin[i] <- min(z) 
    vectordev[i] <- sd(z, na.rm=TRUE) 
    png(filename=paste("hist", i, ".png", sep="")) 
    hist(z) 
    dev.off() 
} 
+0

J'ai commencé à corriger une partie du code de l'OP, puis j'ai réalisé que vous aviez déjà décrit en mots ce qui devait être fait, alors ajoutez du code à votre réponse plutôt que de créer une nouvelle réponse. – Andrie

+0

cool, merci - j'aurais mis ensemble un exemple complet avec les données du paquet rgdal, mais je ne connais pas l'expression rationnelle pour les chiffres dans la partie du nom de fichier et n'ai pas encore recherché :) – mdsumner

+0

Je vais rejoindre éditeurs de votre réponse :) J'ajoute des vecteurs de résultat d'initialisation, en fonction de l'information supplémentaire OP, ils pourraient être nécessaires. – Marek

Questions connexes