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 :

Fonction non fonctionnelle, le comble!


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut Fonction non fonctionnelle, le comble!
    Bonjour à tous,
    Voilà donc ma première requête sur Developpez.net!

    Donc, j'essaie de faire une fonction qui remplace les codes de pays ISO 2 Alpha 2 (ex: FR pour France) par le vrai nom du pays dans une même colonne (x).

    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
     
     
    #Le dataframe que je veux utiliser comme reference codeISO/Pays ressemble à ça:
    countries <- data.frame(Code = c("AE", "AF", "AG", "AL", "AM"),
                            Country = c("Emirat Arabes Unis", "Afghanistan", "Antigua and Barbuda", "Albania", "Armenia"))
     
    #Le dataframe dans lequel je veux remplacer les codes ressemble à ça:
    orchids <- data.frame(Year = c(2001, 2002, 2003, 2004), 
                          Species = c("P. alba", "O. lutea", "O. lutea", "P. pseudacanthis"),
                          Importer = c("AF", "AL", "AF", "AM"))
     
    #Voilà la fonction que j'ai créé
    convcountriesISO <- function(x,ref)
      {x <- ref$Country[match(x,ref$Code)]}
     
    #Et voilà comment je l'utilise:
    convcountriesISO(x = orchids$Importer, ref = countries)
    Mais ça ne fonctionne pas.. Rien, même pas un message d'errreur. La fonction tourne mais ça ne donne rien.
    Auriez-vous une idée du pourquoi ?
    Merci d'avance!
    Théo Guillerminet

  2. #2
    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,

    ce n'est pas que ça ne fonctionne pas, c'est que tu ne forces pas le résultat de ta fonction à s'afficher.
    Si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    y <- convcountriesISO(x = orchids$Importer, ref = countries)
    y
    [1] Afghanistan Albania     Afghanistan Armenia    
    Levels: Afghanistan Albania Antigua and Barbuda Armenia Emirat Arabes Unis
    C'est bien la preuve que le code a fonctionné et qu'il s'est passé quelque chose.

    Pour afficher un résultat en sortie de fonction i te faut rajouter une dernière ligne à ta fonction, tu as deux possibilités :
    i) tu rappelles l'objet que tu viens de créer x;
    ii) tu utilises la fonction return avec l'objet créé return(x).

    cdlt

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut
    Bonjour,

    Merci pour votre réponse rapide!

    Donc, oui, du coup, je vois que ça fonctionne mais ce que je souhaite, ce n'est pas un retour visuel! Mais le remplacement de la colonne 'Importer' du dataframe 'Orchids'.
    Mais celle-ci n'est pas remplacée par le simple ' x <- '..

    Cordialement,
    Théo

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    orchids$Importer <- convcountriesISO(x = orchids$Importer, ref = countries)
    cdlt

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut
    Re,
    Yes! ça ça donne le bon résultat

    Mais j'aimerais bien que la fonction fasse tout le boulot, qu'elle soit autonome sans que j'ai à référencer la colonne à remplacer alors qu'elle ne l'est déjà en x dans la fonction.
    Je pensais que la "x <- " de la fonction ferait le boulot.

    Merci pour votre aide!
    Crdt,
    Théo

  6. #6
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Ça peut se faire directement mais déjà c'est plus compliqué a programmer et ensuite on perd la visibilité sur ce qui est fait sur ton jeu de données, c'est a dire que quand tu lances la fonction quelqu'un qui lirait ton code ne verrait pas qu'une colonne de ton jeu de données a été modifiée alors que quand tu fais <- alors la on voit que quelque chose s'est passé. L'autre limite c'est que ta fonction perd son universalité, elle ne s'applique que pour une colonne alors que la précédente peut fonctionner avec n'importe quel vecteur de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    convcountriesISO <- function(x, ref)
      { 
      y <- deparse(substitute(x))
      z <- deparse(substitute(ref))
      env1 <- parent.frame()
      expr <- sprintf("%1$s <- %2$s$Country[match(%1$s,%2$s$Code)]", y, z)
      eval(parse(text = expr), envir = env1)
      }
    cdlt

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

Discussions similaires

  1. [Drupal] Développement module, fonction non fonctionnelle
    Par Holzhammer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 31/12/2014, 15h57
  2. Fonction réseauconnecte et lanceappli non fonctionnel
    Par djdidi2010 dans le forum WinDev
    Réponses: 3
    Dernier message: 03/04/2012, 14h57
  3. [AC-2007] Fonction de suppression de requête non fonctionnelle
    Par facedeharicot dans le forum VBA Access
    Réponses: 9
    Dernier message: 26/07/2011, 11h49
  4. Fonction getimagesize non fonctionnel (Taille fichier SVG)
    Par Guillaume_Caldera dans le forum Langage
    Réponses: 3
    Dernier message: 17/03/2010, 12h57
  5. Fonction declencheur non fonctionnelle
    Par L'aigle de Carthage dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 16/11/2009, 19h23

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