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 :

Utilisation de la fonction get()


Sujet :

R

  1. #1
    Membre averti
    Homme Profil pro
    Data Scientist
    Inscrit en
    Août 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Scientist
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 139
    Points : 316
    Points
    316
    Par défaut Utilisation de la fonction get()
    Bonjour à tous,

    Je rencontre actuellement quelques problèmes avec la fonction get().

    Je crée une liste de data.frame de mon evironnement avec la fonction ls :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste.EC <- ls(pattern = 'EC')
    Ensuite je veux effectuer une boucle sur l'ensemble des data.frame donc je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (j in 1:length(liste.EC)) {
      aux <- get(liste.EC[i])
      aux <- aux[aux$Date < as.Date("2014-05-21"),]
      assign(j, aux)
    }
    Or j'ai le message d'erreur suivant :
    Error in aux$Date : $ operator is invalid for atomic vectors

    Et quand je regarde ce que contient aux après la premier itération, il contient l'objet liste.EC et non pas le data.frame qu'il devrait avoir.

    Plus étrange encore, lorsque je fais le code à l'extérieur d'une boucle for, je remplace les i par 1, ça marche...

    J'ai aussi effectué une boucle for pour des plots qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    liste.EC <- ls(pattern = 'EC')
     
    for (i in 1:length(liste.EC)) {
      plot(get(liste.EC[i]), main = liste.EC[i], type = 'h')
    }
    Merci de votre aide !

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 325
    Points : 888
    Points
    888
    Par défaut
    Quant tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste.EC <- ls(pattern = 'EC')
    Si une variable liste.EC est déjà en mémoire, alors ls(pattern='EC') contiendra liste.EC (entre autres), puisque "liste.EC" contient "EC".
    Du coup dans ta boucle tu te retrouves à faire liste.EC$Date d'où ton erreur.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2013
    Messages : 75
    Points : 191
    Points
    191
    Par défaut
    je crois que tu as remplacé l'indice j par i dans ta boucle. De plus tu devrais utiliser un indice autre que j dans le 'assign', cela rendrait ton code plus lisible.
    Enfin, pourquoi demander de l'aide sans fournir de code reproductible ? c'est si dur que ça ?

  4. #4
    Membre averti
    Homme Profil pro
    Data Scientist
    Inscrit en
    Août 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Scientist
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 139
    Points : 316
    Points
    316
    Par défaut
    Merci theta, en effet liste.EC contenait liste.EC... D'où mon problème !

    Désolé pour le code qui était très mauvais étant donné que j'avais fait plusieurs modifications pour essayer d'autres solutions...

    Pour répondre à mamounMob il me semblait que c'était juste un erreur de syntaxe toute bête dans mon code, il ne me semblait donc pas utile d'extraire une partie de mes données...

    Le code (corrigé) quand même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    rm(liste.EC) # au cas où
    liste.EC <- ls(pattern = 'EC')
    for (j in 1:length(liste.EC)) {
      aux <- get(liste.EC[j])
      aux <- aux[aux$Date < as.Date("2014-05-21"),]
      assign(liste.EC[j], aux)
    }

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

Discussions similaires

  1. utilisation de la fonction get pour des graphiques
    Par luciendorali dans le forum Tkinter
    Réponses: 11
    Dernier message: 15/11/2011, 18h17
  2. utilisation de la fonction Get
    Par all4youweb dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/06/2010, 18h01
  3. Réponses: 1
    Dernier message: 19/04/2007, 09h08
  4. [VB6] utilisation de Property LET / GET pour un tableau
    Par titounne dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 18/10/2004, 22h06
  5. [LG]librairies : utiliser seulement quelques fonctions
    Par wwwroom dans le forum Langage
    Réponses: 13
    Dernier message: 14/05/2004, 22h50

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