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 :

création de fonction R


Sujet :

R

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Par défaut création de fonction R
    Bonjour,

    je souhaiterais créer une fonction test.data sous R qui prendra en entrée un seul argument nommé file, correspondant au nom du fichier à traiter et retournera un data.frame correspondant au fichier de départ “nettoyé”, prêt à être utilisé.
    il y a plusieurs fichiers à traiter au format csv. il y a un fichier complet et les autres ont des erreurs, le but est que la fonction test.data détecte ces erreurs.

    merci à vous.

  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,

    Quels sont exactement les points qui vous posent problème? La création de la fonction? Le chargement des données dans R? ...

    Pour charger des données au format csv dans R, voir du côté de la fonction "read.csv".
    La structure pour créer une fonction sous R est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    test.data<-function(file)
    {
       (...)
       return(...)
    }
    Pour plus d'infos, il existe de nombreux tutoriels (cf. ici par exemple).


    Sinon, vous pouvez également nous donner plus de détails concernant vos fichiers de données (fournir un court - mais représentatif - extrait si possible) et ce que doit faire votre fonction : quel(s) type(s) d'erreurs doit-elle détecter? doit-elle les corriger? si oui, comment?

    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 averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Par défaut
    Bonjour, voici ce qu'il m'est demandé de faire. Bien évidemment je ne vous demande pas de résoudre l'exercice à ma place, mais je suis totalement perdu.
    J'avais commencé par faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test.data<-function(file)
    mais pour les instructions je ne sais pas quoi mettre. Est-ce que ce sont les questions qui sont posées?
    Et pour le fichier, est-ce que je peux faire cela pour l'utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    test.data<-function(file)
    + {setwd("chemin d'accès")
    + read.csv2("bdd1.csv")
    + read.csv2("bdd2.csv")
    + read.csv2("bdd3.csv")
    + read.csv2("bdd4.csv")
    + read.csv2("bdd5.csv")
    + read.csv2("bdd6.csv")
    + read.csv2("bdd7.csv")
    + read.csv2("bdd8.csv")
    + }
    Je demande juste un échange entre nous, en me posant des questions, et m'aider à réfléchir pour trouver ma solution
    Merci en tout cas de toute l'aide que vous pourrez m'apporter.

    L’objectif est de créer une fonction test.data qui prendra en entrée un seul argument nommé file, correspondant au nom du fichier à traiter, et retournera un data.frame correspondant au fichier de départ “nettoyé”, prêt à être utilisé pour une étude statistique.

    Dans un premier temps, sauvegarder les fichiers bdd1.csv,..., bdd8.csv dans un nouveau répertoire de travail. Il s’agit des fichiers que nous allons traiter. Le fichier bdd1.csv correspond aux résultats d’un questionnaire qui a été posé à des étudiants.
    Dans les autres fichiers, nous avons glissé des “erreurs” : par exemple, les modalités des variables qualitatives ne sont pas codées de la même façon d’un fichier à un autre, des valeurs aberrantes ou manquantes ont pu être ajoutées, etc. Le but est de faire en sorte que la fonction test.data repére ces erreurs, les corrige ou bien affiche un message d’erreur.
    La fonction test.data appliquée aux fichiers bdd1.csv,..., bdd8.csv devra donner les résultats présentés en Exemples.


    La fonction test.data devra donc effectuer les opérations suivantes de maintenance :

    • importer le fichier de données en utilisant la fonction read.csv2.

    • vérifier que le nombre de colonnes est égal à 9 et si ce n’est pas le cas, arrêter le programme avec un message d’erreur.

    • donner aux variables les noms suivants, dont on donne la définition suivante :
      – age : âge.
      – sexe : sexe, deux modalités m, f.
      – csp : catégorie socio-professionnelle du chef d efamille, 7 modalités : agri, Agriculteur, cadre, Cadre supérieur, chef-arti-indep, Chef d’entreprise, artisan, indépendant, intermed, profession intermédiaire, employes, em- ployés, ouvriers, ouvriers et ret-inact, retraité, inactif.
      – avenir : vous arrive-t-il de parler de votre avenir professionnel avec vos parents, 4 modalités -- (jamais), - (peu), + (moyennement), ++ (souvent).
      – projet : à quel niveau d’étude souhaitez-vous arriver (bac +1 à >bac +5).
      – chance : quelles sont les chances d’y arriver, 4 modalités (insignificant, low, fair ou good.
      – moyenne : moyenne générale au bac.
      – telephone : le buget moyen par mois en téléphone en euros.
      – loyer : le loyer mensuel en euros.

      # effectuer le changement de modalité (M ou male) en m, (F ou female) en f pour la variable sexe, le changement de modalité insignificant en quasi-nulle, low en faible, fair en moyenne, good en forte pour la variable chance.
      Remarque : utiliser directement la fonction levels afin d’éviter l’utilisation de l’instruction for ou if.

    • vérifier qu’il n’existe pas d’autres modalités que agri, cadre, chef-arti-indep, intermed, employes, ouvriers et ret-inact pour la variable csp et bac +1, bac +2, bac +3, bac +4, bac +5 et >bac +5 pour la variable projet,
      et arrêter avec un message d’erreur s’il existe d’autres modalités en précisant de quelle(s) modalité(s) il s’agit.
      Remarque : on pourra utiliser la fonction stop() pour chaque variable testée plutôt que d’imbriquer plusieurs conditions.

    • vérifier que la classe de la variable age est integer, et celle de moyenne, telephone et loyer est numeric ou integer. Si une de ces conditions n’est pas vérifiée, arrêter le programme et mettre un message d’erreur.
      Remarque : on pourra utiliser la fonction stop() pour chaque variable testée plutôt que d’imbriquer plusieurs conditions.

    • vérifier que age est strictement inférieur à 100 et que avenir ne prend que les modalités --, -, + ou ++. On arrêtera le programme et affichera un message d’erreur dans le cas contraire en signalant les valeurs qui posent problèmes.

    • supprimer les lignes qui contiennent au moins une valeur manquante. On s’aidera de la fonction na.omit.

    • remplacer dans la variable loyer les valeurs inférieures ou égales à 100 par la moyenne de la variable loyer. Remplacer les valeurs de telephone supérieures à 75 par la moyenne de telephone.

    • créer à l'aide de la fonction ifelse, une variable loyer.discret dont les modalités sont faibles si la variable loyer est inférieure à 200, moyennes si la variable loyer est comprise entre 200 et 500 et fortes sinon.
      Enfin, vous retournerez le data.frame créé avec la fonction return.

  4. #4
    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
    Re-bonjour,

    Comme vous le dîtes, nous n'allons pas faire votre devoir à votre place, cependant je peux essayer de vous donner quelques pistes.

    Tout d'abord, il est dit dans votre enoncé que la fonction "test.data" va être appliquée à chacun des fichiers bdd1.csv, ..., bdd8.csv, ie. qu'elle sera appliquée sur ces fichiers chacun leur tour, ie. vous aurez à faire tourner 8 fois votre fonction (je ne suis pas sûre que cela était clair pour vous).

    Ensuite, ce que je vous conseillerais tout d'abord est de commencer avec un des fichiers (par exemple le "bdd1.csv") et d'essayer d'écrire le code correspondant à chacune des 9 étapes demandées (cf. votre liste d'instructions). Une fois cela réussi, le plus gros du travail sera fait et il ne restera "plus" qu'à intégrer le code dans une fonction R.
    Vous pouvez venir poster votre code correspondant à ces étapes si vous avez besoin d'aide (pensez à poster également un extrait de votre jeu de données sur lequel on puisse reproduire le code, si nécessaire).

    Enfin, pour ce qui est de la création de fonction, vous pouvez commencer par essayer de programmer des fonctions "basiques" pour vous familiariser avec la syntaxe.
    Pour info, l'argument "file" de la fonction est juste une variable à laquelle on affectera le nom du fichier sur lequel on veut appliquer la fonction, ie. pour faire tourner notre fonction (une fois qu'elle sera créée bien sûr), on pourra écrire les instructions suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    D1<-test.data(file="bdd1.csv")
    D2<-test.data(file="bdd2.csv")
    ...
    D8<-test.data(file="bdd8.csv")
    Et les éléments D1 à D8 seront les data.frame "corrigés".


    Voilà, pour l'instant je pense que vous devriez vous concentrer sur l'écriture du code pour résoudre les 9 étapes demandées et une fois que cela sera ok, vous pourrez vous pencher plus amplement sur la création de fonction.

    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.

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

Discussions similaires

  1. Création de fonctions dans DLL
    Par salrouge dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/08/2006, 09h42
  2. Création de fonction ou méthode
    Par sam.fet dans le forum ASP
    Réponses: 2
    Dernier message: 03/08/2006, 16h17
  3. Création de fonction
    Par Lo² dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 13/07/2006, 11h00
  4. Création de fonction
    Par benazerty dans le forum Access
    Réponses: 6
    Dernier message: 14/04/2006, 10h40
  5. Réponses: 5
    Dernier message: 30/03/2006, 14h52

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