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 :

Boucle for pour renommé les éléments d'une liste


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 1
    Par défaut Boucle for pour renommé les éléments d'une liste
    Bonjour à tous,

    J'ai un petit problème pour renommer les éléments d'une colonne au sein d'une boucle for (c'est ma première boucle for, donc c'est surement un problème simple, mais même en cherchant je ne vois pas trop comment faire).

    Je pars de 15 objets list , ou j'essaie de renommer un élément de cette liste (ils sont tous formatés de la même manière) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > str(cluster1plot)
    List of 3
     $ rownames  : Factor w/ 14911 levels "A1BG-AS1","A2M",..: 1 4 13 17 43 46 54 65 68 72 ...
     $ Sample    : chr [1:5672] "Sample1" "Sample1" "Sample1" "Sample1" ...
     $ expression: num [1:5672] -2.24 -1.87 -2.22 -1.48 -2.12 ...
    l'idée est de remplacer les "Sample1" par un 1, "Sample2" par 2... pour faciliter la représentation plus tard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i in 1:15) { 
    get(paste("cluster",i,"plot",sep=""))$Sample<-
      as.numeric(sub("Sample","", get(paste("cluster",i,"plot",sep=""))$Sample))}
    là j'obtiens ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error in get(paste("cluster", i, "plot", sep = ""))$Sample <- as.numeric(sub("Sample",  : 
      la cible de l'assignation est un objet n'appartenant pas au langage
    En cherchant un peu, j'ai compris que ce message apparaissait quand l'objet en lui-même n'était pas dans l'environnement de travail. Ça m'étonne un peu car quand je fais juste la première partie du code, l'ensemble de la sous-liste Sample apparaît, mais c'est vrai que ce n'est pas un objet en lui-même.

    Ensuite, j'ai essayé avec assign() (je me suis focalisé uniquement sur cluster1plot pour éviter de recharger la boucle) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    assign(x=get(paste("cluster",1,"plot",sep=""))$Sample, value = as.numeric(sub("Sample","", get(paste("cluster",1,"plot",sep=""))$Sample)))
    Warning message:
    In assign(x = get(paste("cluster", 1, "plot", sep = ""))$Sample,  :
      seulement le premier élément est utilisé comme nom de variable
    Là j'imagine que c'est le $Sample qui n'est pas apprécié par assign(). J'ai essayé de le passer dans le get() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    assign(x=get(paste("cluster",1,"plot","$Sample", sep="")), value = as.numeric(sub("Sample","", get(paste("cluster",1,"plot",sep=""))$Sample)))
    Error in assign(x = get(paste("cluster", 1, "plot", "$Sample", sep = "")),  : 
      premier argument incorrect
    J'ai encore essayé d'autres choses, mais ça ne fonctionne toujours pas. Est-ce quelqu'un aurait le petit coup de pouce qui me débloquerait ?

    Merci beaucoup,

    Nicolas

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2018
    Messages : 20
    Par défaut
    Si ils sont tous formaté de la même manière, tu n'a qu'a utiliser la fonction substr pour extraire juste le dernier caractère de ta chaîne.

    Exemple :

    va te renvoyer 1

    Ali3529

  3. #3
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Bonjour,

    le combo des fonctions parse et eval permet d'évaluer une commande que tu créerais à partir d'une chaîne de caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    exprs <- sprintf("cluster%1$dplot$Sample <- as.numeric(gsub('\\\\D', '', cluster%1$dplot$Sample))", 1:15)
    for (i in exprs) 
      eval(parse(text = i))
    cdlt

Discussions similaires

  1. Boucle for pour chercher le maximum dans une colonne
    Par khaoulagammoudi dans le forum R
    Réponses: 1
    Dernier message: 05/04/2017, 18h03
  2. Utiliser un controle utilisateur pour afficher les éléments d'une liste
    Par MiniCesc dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 05/10/2010, 15h13
  3. [AC-2003] boucle For Each sur les donnees d'une table
    Par TheRRb dans le forum VBA Access
    Réponses: 6
    Dernier message: 20/07/2009, 12h15
  4. boucle for pour trier les doublons
    Par gerald57 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2008, 15h40
  5. Réponses: 12
    Dernier message: 04/03/2007, 11h43

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