Un petit hack pour éviter les conflits de packages sous R

solution au conflits de packages sous R

Si vous utilisez le package dplyr pour manipuler vos données, vous avez sans doute déjà été confronté à des conflits de packages.

 

Les conflits de package, c’est quoi ?

Personnellement, je rencontre régulièrement des conflits de packages lorsque je cherche à sélectionner certaines variables d’un jeu de données. Pour cela, j’utilise systématiquement une syntaxe tidyverse compatible, avec la fonction select() du package dplyr. Comme cela par exemple, si je ne veux que garder les variables relatives à l’espèce et aux sépales du jeu de données iris :

Mais parfois au cours de mon analyse de données, patatra….le code ne fonctionne pas ! Et c’est difficile de comprendre pourquoi parce qu’aucun message d’erreur n’est renvoyé !

 

conflits de packages : qu'est ce qui se passe

 

En fait, ce qui se passe c’est un conflit de package : ce n’est pas la fonction select() du package dplyr qui est utilisée par R, mais la fonction select() d’un autre package. Et comme celui-ci n’est pas tidyverse compatible, et bien la sélection de variables ne s’effectue pas.

Et ce conflit de package ne concerne pas que la fonction select() de dplyr ! Il peut aussi concerner les fonctions filter() et summarise(), mais aussi des fonctions d’autres packages.

 

Une solution pas très satisfaisante aux conflits de packages

Alors pour éviter ce problème de conflit de packages, on peut indiquer  à R dans quel package il doit aller chercher la fonction désirée. Pour cela, on ajoute le nom du package, suivi de deux fois deux points, avant la fonction, par exemple dplyr::select() comme cela :

C’est une solution qui n’est pas extrêmement pratique parce qu’il faut ajouter le nom du package à chaque fois qu’on utilise la fonction….

 

THE SOLUTION aux conflits de packages

 

Et puis hier après midi, sur twitter, j’ai vu ce tweet, avec THE SOLUTION !La solution au conflits de packages sous le logiciel R

 

 

 

THE SOLUTION, consiste à installer le package conflicted, puis à utiliser la fonction conflict_prefer() pour forcer l’utilisation des fonctions d’un certain package (que l’on va spécifier) ! Comme ceci par exemple pour forcer l’utilisation des fonctions select() et filter() de dplyr :

 

 

 

Il suffit donc de déclarer ses préférences une seule fois, enfin, une seule fois par fonction, mais c’est déjà vraiment mieux !

Si vous travaillez en R markdown, vous pouvez, par exemple, les insérer dans le chunk set up, comme ceci :

éviter les conflits de packages sous R

 

Et comme je suis une grande fan de la fonction here(), du package here pour créer les chemins d’accès des jeux de données ou des images et que j’emploie systématiquement la syntaxe here::here(), je pense que je vais aussi l’intégrer dans une fonction conflict_prefer().

 

Et vous, avec quelle fonction avez-vous déjà constaté des conflits ? Indiquez les moi en commentaire.

Et Si cet article vous a plu, n’oubliez pas de le partager (avec les boutons en à gauche de l’article) 😉

 

Image par rodrigomullercwb , Anand Kumar ,et talha khalil de Pixabay

 

Poursuivez votre lecture avec d’autres article “astuce” :

 

 

Partager l'article
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

6 commentaires

  1. Bruno FIEVET Répondre

    Bonjour Claire,
    Juste encore un jour pour te souhaiter une bonne année 2020 et une excellente santé à toi et ceux qui te sont cher. Membre de la première heure de ton fan-club, je ne manque pas de parcourir chacun de tes posts même si je ne pratique pas beaucoup dans mon quotidien. Ils accrochent toujours ma curiosité et mon intérêt. J’apprécie leurs qualités pédagogiques et pragmatiques. Leur format bien ciblé et compact permet de les assimiler très vite et de les catégoriser facilement. Leur mise en pratique immédiate les rend précieux.
    Continue, on compte sur toi…

  2. Ovide Répondre

    Merci beaucoup Claire de votre article et travail consacré au service de l’humanité!

  3. Alain Répondre

    Super Claire, Merci beaucoup, pas plus tard qu’aujourd’hui j’ai été confronté à un conflit de package pour les fonctions summarise de dplyr et celle de plyr. du coup, ne connaissant pas la fonction conflict_prefer(), j’écrivais à chaque fois dplyr:: summarise. trop long si nous avons plusieurs de lignes de code à éffectuer.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *