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 :

boxplot dans une fonction


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    Par défaut boxplot dans une fonction
    Bonjour,

    Un petit problème de paramétrage.
    J'essaie de faire un boxplot dans une fonction, pour pouvoir ensuite changer de variable. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    essai <- function(Variable) {
       boxplot(Variable~Species, data=iris)
    }
    essai("Sepal.Length")
    J'obtiens un joli message d'erreur :
    Error in model.frame.default(formula = Variable ~ Species, data = iris) : variable lengths differ (found for 'Species')

    Est-ce que quelqu'un saurait comment réécrire cette fonction ?

  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 : 37
    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
    Par défaut
    Bonjour,

    L'erreur vient du fait que vous passez à la fonction le nom de la variable en tant que chaîne de caractères mais ce n'est pas ce qu'attend en entrée la fonction boxplot.
    Une manière d'y remédier (mais il y a peut-être plus "joli" ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    essai <- function(Variable) {   
       formul <- paste0(Variable, "~Species")
       boxplot(eval(parse(text = formul)), data=iris)
    }

    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 éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    Par défaut
    Citation Envoyé par A. D. Voir le message
    Bonjour,

    L'erreur vient du fait que vous passez à la fonction le nom de la variable en tant que chaîne de caractères mais ce n'est pas ce qu'attend en entrée la fonction boxplot.
    Une manière d'y remédier (mais il y a peut-être plus "joli" ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    essai <- function(Variable) {   
       formul <- paste0(Variable, "~Species")
       boxplot(eval(parse(text = formul)), data=iris)
    }
    Bonsoir,
    Merci de ce code qui correspond à ce dont j'avais besoin.
    Vous serait-il possible de m'expliquer l'instruction eval(parse(text = formul)) ?

  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
    Bonjour,

    Peut-être une alternative plus simple à comprendre. Tu peux transformer une chaîne de caractères en formule avec la fonction as.formula :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    essai2 <- function (Variable) 
    {
        formul <- as.formula(paste0(Variable, "~Species"))
        boxplot(formul, data = iris)
    }
    cdlt

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    Par défaut
    Ah génial !

    Merci Messieurs - Dames

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

Discussions similaires

  1. Recuperation de formulaire dans une fonction
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 23/06/2004, 15h04
  2. Transmission d'un objet crée dans une fonction
    Par EvilAngel dans le forum ASP
    Réponses: 2
    Dernier message: 10/05/2004, 20h19
  3. Utilisez MinimizeName() dans une fonction
    Par James_ dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/05/2004, 18h05
  4. [Postgresql]Connecter à une autre base dans une fonction
    Par alex2205 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/05/2003, 11h30
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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