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 :

[Debutant] liste d'objets et non de strings


Sujet :

R

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut [Debutant] liste d'objets et non de strings
    Bonjour,

    Mon problème est trivial, néanmoins cela fait bien 3 heures que je suis coincé dessus ...

    J'ai plusieurs csv que je souhaite lire. Étant novice en R, j'ai cherché sur internet comment faire cela, et je me suis inspiré d'un exemple de code que j'ai trouvé. Adapté à mon cas, cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    rm(list=ls())
    ##Read files
    filenames <- list.files(path="C:/test",
                            pattern=".*csv")
     
    ##Create list of data frame names without the ".csv" part 
    names <-substr(filenames,1,nchar(filenames)-4)
     
    ###Load all files
    for(i in names){
      filepath <- file.path("C:/test/",paste(i,".csv",sep=""))
      assign(i, read.table(filepath,skip = 21,na.strings="---",
                           colClasses=c("character","numeric",rep("character",2)),
                           sep = ","))
     
    }
    Si je comprends bien, d'un côté, j'ai une liste "names" qui ne contient pas les objets lus, mais seulement les noms (i.e. strings) des fichiers, (liste names) et a côté de cela j'ai un objet par fichier qui porte le nom du fichier qui, lui, contient les données.

    Si j'ai bien compris, je peux les récupérer et les consulter avec get(). Par exemple, pour récupérer la seconde colonne du premier fichier, je peux utiliser :
    Mon problème est que j'ai l impression que si je peux lire les données, je ne peux pas les modifier (style éliminer les valeurs NA). Je me suis peut-être trompé dans la syntaxe, mais le code suivant ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    get(names[1])[is.na(get(names[1]))] <-0
    De plus, ça n'a pas l air super pratique de se trainer ce get() à toutes les sauces.

    Bref, je voudrais donc que durant ma lecture des données, j'obtienne une liste contenant les objets eux-mêmes. Je pense que cela sera plus simple pour la suite. Mais helas, je ne vois pas comment faire cela.

    Une âme charitable pourrait m'aider svp ?

    Merci

    Slumpy.

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Mon message ne répond pas entièrement à vos questions, mais pour contourner le problème des "assign" et compagnie, pourquoi ne pas passer par une liste ?
    Vous créez une liste avec autant d'éléments que de fichiers csv à charger dans R, et vous utilisez votre boucle pour charger ces différents fichiers.

    HTH !

    Bonne continuation


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Salut, et merci d'avoir pris le temps de répondre.

    Effectivement, le code ci-dessous resout bien mon problème, puisque je me retrouve avec une liste "my_list" qui contient mes objets, avec leur nom associé. Comme un âne, j'ai suivi l'exemple que j'avais lu sur un autre site et étais donc parti dans la mauvaise direction.

    Merci !

    Slumpy


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    rm(list=ls())
    ##Read files
    filenames <- list.files(path="C:/test",
                            pattern=".*csv")
     
    ##Create list of data frame names without the ".csv" part 
    my_names <-substr(filenames,1,nchar(filenames)-4)
     
    ###Load all files
    my_list <- vector("list", length(my_names))
    for(i in 1:length(my_names)){ 
      filepath <- file.path("C:/test/",paste(my_names[i],".csv",sep=""))
      my_list[[i]] <- read.table(filepath,skip = 21,na.strings="---",
                           colClasses=c("character","numeric",rep("character",2)),
                           sep = ",")
    }  
     
    names(my_list) <- my_names

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/11/2012, 13h47
  2. Réponses: 6
    Dernier message: 18/05/2009, 16h38
  3. Réponses: 20
    Dernier message: 18/06/2006, 11h44
  4. [Kylix] Composant - Liste d'objet
    Par Metal3d dans le forum EDI
    Réponses: 1
    Dernier message: 13/12/2002, 22h17
  5. liste d'objets
    Par Pierrot dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2002, 09h56

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