IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

écrire un programme en R (boucle) à partir de fichiers issus d'un même dossier


Sujet :

R

  1. #1
    Candidat au Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 2
    Points
    2
    Par défaut écrire un programme en R (boucle) à partir de fichiers issus d'un même dossier
    Bonjour tout le monde,

    Je suis nouveau sur le forum et débutant en programmation R (R Studio pour être plus précis).

    Je tente de réaliser une série de graphiques assez simples de ce type (cf ci-dessous), représentant le profil 2D d’une plage (du haut de la plage vers le bas).
    Mes données sont d’une simplicité redoutable : x = longueur du profil en m ; y = altitude du profil en m :

    Pièce jointe 173184

    Exemple :

    distance altitude
    1 0 8.45
    2 1 8.54
    3 2 8.19
    4 3 8.05
    5 4 7.26
    6 5 7.16
    ...

    Les réaliser un par un ne me pose pas problème, j’utilise le package "openair":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    beach <- read.table("C:/Users/Blaise/Documents/THESE/dossier_R/2014_article_nord_bzh/profils/profil_Poulou_Aot.txt", header=TRUE, sep="\t", dec=".")
    names(beach) <- c("distance", "altitude")
    plot((beach), type="l", col="red", xlab="distance (m)", ylab="altitude (m)")
    Seulement, j’ai 100 sites à traiter ! J’aimerais donc créer une boucle qui pioche chacun de mes fichiers « .txt » contenus dans un même dossier, afin de m’éviter de faire tous les graphs un par un.
    Pour cela, j’utilise la méthodo décrite dans « R pour les débutants » (Paradis, 2005, p72) …

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    species <- c("swallow", "wren", "dunnock")
    file <- c("Swal.dat" , "Wren.dat", "Dunn.dat")
    for(i in 1:length(species)) {
    data <- read.table(file[i]) 
    plot(data$V1, data$V2, type="l")
    title(species[i])
    }

    …que j’adapte à mes données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    beaches <- c("poulou", "prat", "porsguen")
    file <- c("profil_poulou_aot.txt", "profil_prat_leach_kerros.txt", "profil_porsguen.txt")
    for(i in 1:length(beaches)){
      data <-read.table(file[i])
      plot(distance, altitude, type="l")
      title(beaches[i])
    }
    J’obtiens ce message d’erreur :
    Error in plot(x, y, type = "l") : object 'x' not found

    Pourtant j'ai un "x" et un "y" défini dans chacun de mes fichiers...
    Si quelqu'un pouvait m'aider. Par avance merci.

    Manu

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Comment sont formatés vos fichiers CSV ? Notamment, quel est le séparateur de colonnes ? La virgule ou le point-virgule ? Si c'est le point-virgule, il faut ajouter un paramètre à read.table(), voire utiliser à la place la fonction read.csv2.
    N'hésitez pas à consulter l'aide ?read.table
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Candidat au Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 2
    Points
    2
    Par défaut problème résolu
    Mon problème est résolu.

    J'ai trouvé quelqu'un dans mon labo capable de régler le problème. Je poste donc le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    beaches <- c("Poulou Aot", "Prat", "Porsguen")
    file <- c("1_profil_poulou_aot.txt", "2_profil_prat_leach_kerros.txt", "3_profil_porsguen.txt")
    for(i in 1:length(beaches)) {
      data <- read.table(file[i], header = TRUE) 
      names(data) <- c("distance", "altitude")
      plot((data), type="l", col="red", xlab="Distance (m)", ylab="Altitude (m)")
      title(beaches[i])
    Le problème venait à priori du fait que, la première ligne (x, y) n'étant pas signalée comme "header", était considérée comme des erreurs dans mes données.

    Merci quand même pour la réponse.


    Manu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [pda] Programmer en PhP a partir sous wm6
    Par silverbeach dans le forum Mobiles
    Réponses: 2
    Dernier message: 25/05/2009, 14h23
  2. Réponses: 6
    Dernier message: 27/08/2007, 23h29
  3. [VBA-E]Problème sur la façon d'écrire un programme...
    Par olosta dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/04/2006, 22h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo