columns - select fields dplyr
La funciĆ³n dplyr:: select choca con MASS:: select (3)
Si carga el paquete MASS
:
library(MASS)
luego, cargue, intente ejecutar dplyr::select
, dplyr::select
un error:
library(dplyr)
mtcars %.%
select(mpg)
# Error in select(`__prev`, mpg) : unused argument (mpg)
¿Cómo puedo usar dplyr::select
con el paquete MASS
cargado?
Como decía Pascal, las siguientes obras.
require(MASS)
require(dplyr)
mtcars %>%
dplyr::select(mpg)
Esto me sucede con más frecuencia de lo que debería admitir. dplyr choca con MASS::select
, plyr::summarise
y stats::filter
entre otras cosas, especialmente al cargar paquetes que cargan una de esas bibliotecas a través de la biblioteca (no deberían, pero algunos aún lo hacen) o cuando se carga dplyr su. .Rprofile
(no!). Y puede llevar a problemas bastante oscuros, no siempre un mensaje de error, especialmente conflictos con plyr
.
Sólo recientemente aprendí sobre la función de conflicts()
. Es útil, pero "sobreinforma" entra en conflicto cuando dos paquetes tienen funciones idénticas, por ejemplo, tidyr :: %>%
y dplyr :: %>%
.
Así que escribí una función para decirme si me estoy volviendo loco o si realmente hay un conflicto que causa el error actual. No solo comprueba si hay conflictos, sino también si un determinado paquete deseado es el que está "en la parte superior" y si los cuerpos de la función realmente difieren.
Lo hace para dplyr de forma predeterminada, pero puede especificar otro paquete utilizando el parámetro want_package
. Por ejemplo, a menudo me tropiezo con recode
y alpha
, que se reutilizan en muchos paquetes.
El uso es simplemente: amigoingmad()
.
De forma predeterminada, también "reparará" automáticamente las cosas si dplyr no está "arriba", usando los siguientes comandos:
detach("package:dplyr", character.only = TRUE)
library("dplyr", character.only = TRUE)
Tenga en cuenta que la función informará si una función especificada por el usuario está bloqueando dplyr, pero no lo soluciona automáticamente por razones de seguridad (solo elimine la función en ese caso).
Hasta el momento, esta solución no me ha causado ningún problema. Por supuesto, no recomendaría el uso de esto en el código de producción, pero cuando está depurando un .Rmd
.Rmd y es posible que haya desordenado el orden de carga por accidente, es una forma rápida de averiguarlo.
Si quieres esto en un paquete:
devtools::install_github("rubenarslan/formr")
Si carga primero la librería MASS
y luego la segunda dplyr
library (MASS)
library (dplyr)
luego, la primera versión de la función de select
en las dplyr
searchpaths ()
sesión searchpaths ()
será la de la biblioteca dplyr
.
Por lo tanto
select(mtcars, mpg)
trabajará como
dplyr::select(mtcars, mpg)