dplyr :: select est en conflit avec MASS :: select

Si je charge le paquetage MASS :

 library(MASS) 

puis charger essayer de lancer dplyr::select , je reçois une erreur:

 library(dplyr) mtcars %.% select(mpg) # Error in select(`__prev`, mpg) : unused argument (mpg) 

Comment puis-je utiliser dplyr::select avec le package MASS chargé?

Comme l’a dit Pascal, les œuvres suivantes

 require(MASS) require(dplyr) mtcars %>% dplyr::select(mpg) 

Cela m’arrive plus fréquemment que je ne devrais l’admettre. dplyr entre en conflit avec MASS::select , plyr::summarise et stats::filter , notamment lors du chargement de paquets qui chargent une de ces bibliothèques via la bibliothèque (ils ne le devraient pas, mais certains le font encore) ou lorsque vous chargez dplyr dans votre .Rprofile (non!). Et cela peut conduire à des problèmes assez obscurs, pas toujours un message d’erreur, en particulier des conflits avec plyr .

Je n’ai appris que récemment la fonction conflicts() . C’est utile, mais les “sur-rapports” génèrent des conflits lorsque deux paquets ont des fonctions identiques, par exemple tidyr :: %>% et dplyr :: %>% .

J’ai donc écrit une fonction pour me dire si je devenais fou ou s’il y avait un conflit à l’origine du bogue actuel. Il ne vérifie pas seulement les conflits, il vérifie si un certain paquet souhaité est celui “en haut” et si les corps de la fonction diffèrent réellement.

Il le fait par défaut pour dplyr, mais vous pouvez spécifier un autre package en utilisant le paramètre want_package . Par exemple, je suis souvent victime de recode et d’ alpha , qui sont réutilisés dans de nombreux paquets.

L’utilisation est simplement: amigoingmad() .

Par défaut, il corrigera automatiquement les choses si dplyr n’est pas “en haut”, en utilisant les commandes suivantes:

 detach("package:dplyr", character.only = TRUE) library("dplyr", character.only = TRUE) 

Notez que la fonction signalera si une fonction spécifiée par l’utilisateur bloque dplyr, mais ne le corrige pas automatiquement pour des raisons de sécurité (supprimez simplement la fonction dans ce cas).

Pour l’instant, cette solution ne m’a causé aucun problème. Bien sûr, je ne préconiserais pas l’utilisation de ce code dans le code de production, mais lorsque vous .Rmd un .Rmd .Rmd et que vous avez endommagé l’ordre de chargement par accident, c’est un moyen rapide de le savoir.

Si vous voulez cela dans un paquet:

 devtools::install_github("rubenarslan/formr") 

Si vous chargez d’ abord la librairie MASS et la seconde la dplyr

 library (MASS) library (dplyr) 

alors la première version de la fonction select dans votre session searchpaths () sera celle de la bibliothèque dplyr .

Par conséquent

 select(mtcars, mpg) 

travaillera comme

 dplyr::select(mtcars, mpg)