Questo mi succede più spesso di quanto avrei dovuto ammettere. dplyr scontri con MASS::select
, plyr::summarise
e tra le altre cose, specialmente quando si caricano pacchetti che caricano una di queste librerie tramite libreria (non dovrebbero, ma alcuni ancora lo fanno) o quando si carica dplyr nel proprio .Rprofile
(no!). E può portare a problemi piuttosto oscuri, non sempre un messaggio di errore, in particolare i conflitti con plyr
.
Recentemente ho appreso della funzione conflicts()
. È utile, ma i conflitti "over-report" quando due pacchetti hanno funzioni identiche, ad es. tidyr :: %>%
e dplyr :: %>%
.
Così ho scritto a function per dirmi se sto impazzendo o se c'è effettivamente un conflitto che causa il bug corrente. Non solo controlla i conflitti, controlla se un certo pacchetto desiderato è quello "in cima" e se i corpi della funzione in realtà differiscono.
Fa questo per dplyr per impostazione predefinita, ma è possibile specificare un altro pacchetto utilizzando il parametro want_package
. Ad esempio, mi capita spesso di incappare in recode
e alpha
, che vengono riutilizzati in molti pacchetti.
L'utilizzo è semplicemente: amigoingmad()
.
Per impostazione predefinita, lo farà automaticamente anche "fissare" le cose, se dplyr non è "in alto", utilizzando i seguenti comandi:
detach("package:dplyr", character.only = TRUE)
library("dplyr", character.only = TRUE)
Si noti che la funzione segnalerà se una funzione specificata dall'utente è il blocco dplyr, ma non lo aggiusta automaticamente per motivi di sicurezza (basta rimuovere la funzione in quel caso).
Per ora, questa soluzione non mi ha causato alcun problema. Naturalmente non vorrei difendere l'uso di questo nel codice di produzione, ma quando esegui il debug di un file .Rmd
e potresti aver incasinato l'ordine di caricamento per errore, è un modo rapido per scoprirlo.
Se si desidera che questo in un pacchetto:
devtools::install_github("rubenarslan/formr")
è possibile utilizzarlo come hai appena scritto: 'dplyr :: select (mpg)' –