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 :

Ecrire fonction itérative


Sujet :

R

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2018
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Ecrire fonction itérative
    Bonjour,

    J'ai ce code classique de R, comment peux-je s'il vous plaît l'amélioré avec une fonction itérative ?

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    tab1<-data.frame(table(BS1$CodeelemRemunLL))#calculer l'effectif par CodeelemRemunLL
    tab2<-data.frame(table(BS2$CodeelemRemunLL))
    tab3<-data.frame(table(BS3$CodeelemRemunLL))
    tab4<-data.frame(table(BS4$CodeelemRemunLL))
    tab5<-data.frame(table(BS5$CodeelemRemunLL))
    tab6<-data.frame(table(BS6$CodeelemRemunLL))
    tab7<-data.frame(table(BS7$CodeelemRemunLL))
    tab8<-data.frame(table(BS8$CodeelemRemunLL))
    tab9<-data.frame(table(BS9$CodeelemRemunLL))
    tab10<-data.frame(table(BS10$CodeelemRemunLL))
    tab11<-data.frame(table(BS11$CodeelemRemunLL))
    tab12<-data.frame(table(BS12$CodeelemRemunLL))
     
     
    tab_1<-merge(tab1,tab2,by="Var1",all.x=TRUE,all.y=TRUE)##### fonction merge
    tab_2<-merge(tab_1,tab3,by="Var1",all.x=TRUE,all.y=TRUE)
    tab_3<-merge(tab_2,tab4,by="Var1",all.x=TRUE,all.y=TRUE)
    tab_4<-merge(tab_3,tab5,by="Var1",all.x=TRUE,all.y=TRUE)
    tab_5<-merge(tab_4,tab6,by="Var1",all.x=TRUE,all.y=TRUE)
    tab_6<-merge(tab_5,tab7,by="Var1",all.x=TRUE,all.y=TRUE)
    tab_7<-merge(tab_6,tab8,by="Var1",all.x=TRUE,all.y=TRUE)
    tab_8<-merge(tab_7,tab9,by="Var1",all.x=TRUE,all.y=TRUE)
    tab_9<-merge(tab_8,tab10,by="Var1",all.x=TRUE,all.y=TRUE)
    tab_10<-merge(tab_9,tab11,by="Var1",all.x=TRUE,all.y=TRUE)
    tab_11<-merge(tab_10,tab12,by="Var1",all.x=TRUE,all.y=TRUE)
    Merci à vous.

  2. #2
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut
    Bonjour,

    regarde la fonction Reduce. Tu as un exemple ici ou .
    Cela devrait répondre à ton problème.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2018
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Merci pour votre réponse, mais je n'arrive pas à comprendre le fonctionnement de Reduce et surtout la définition function(x,y)?

  4. #4
    Membre averti
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Points : 343
    Points
    343
    Par défaut
    Bonjour,

    Une alternative.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    list <- list(BS1, BS2 , ..... , BS12 ) #compléter la liste
     
    tab = paste('tab' , 1:12, sep = '')
     
    for ( i in 1:12)
    {assign(tab[i], as.data.frame(table(list[i])))}
     
    MergedDT = Reduce(function(...) merge(... , by="Var1"), list(BS1, BS2 , ..... , BS12 ) " compléter la liste")

  5. #5
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut
    Dans le premier exemple donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reduce(function(x, y) merge(x, y, all=TRUE), list(df1, df2, df3))
    signifie appliquer itérativement la fonction à la liste donnée en dernier argument. C'est comme si on avait écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    merge(merge(df1, df2, all=TRUE), df3, all=TRUE)
    function(x, y) précise quels arguments changent dans la fonction merge à appliquer itérativement.

    Soit vvous faites deux fois Reduce, une pour chaque étape, soit la solution ci-dessus.

Discussions similaires

  1. ecrire fonction arrondi sup sous VBA
    Par boom47 dans le forum Excel
    Réponses: 1
    Dernier message: 25/01/2012, 16h35
  2. Ecrire fonction trigger
    Par NGeVtC87 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/02/2010, 07h59
  3. Ecrire dans un fichier avec une fonction itérative.
    Par katcha95 dans le forum Débuter
    Réponses: 6
    Dernier message: 22/11/2009, 18h40
  4. Réponses: 4
    Dernier message: 08/09/2009, 18h42
  5. Ecrire fonction VB6
    Par nicoweb371 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/11/2005, 10h44

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