Métodos de enmascaramiento en R
Esta pregunta y en particularesta respuesta surgió la siguiente pregunta: ¿Cómo puedo obtener una advertencia sobre el enmascaramiento de los métodos en R?
Si ejecuta el siguiente código en una sesión limpia de R, notará que cargandodplyr
cambia el método predeterminado paralag
.
lag(1:3, 1)
## [1] 1 2 3
## attr(,"tsp")
## [1] 0 2 1
require(dplyr)
lag(1:3, 1)
## [1] NA 1 2
Si adjunta el paquetedplyr
, recibe advertencias para varios objetos enmascarados, pero no hay advertencia sobre el método predeterminado paralag
ser enmascarado La razón es que al llamarlag
, la función genérica de lastats
Se llama paquete.
lag
## function (x, ...)
## UseMethod("lag")
## <bytecode: 0x000000000c072188>
## <environment: namespace:stats>
Ymethods(lag)
solo me dice que hay un métodolag.default
. Puedo ver que hay dos métodos usandogetAnywhere
:
getAnywhere(lag.default)
## 2 differing objects matching ‘lag.default’ were found
## in the following places
## registered S3 method for lag from namespace dplyr
## namespace:dplyr
## namespace:stats
## Use [] to view one of them
Pero esto requiere que sepa verificar si el valor predeterminadolag
el método fue cambiado pordplyr
. ¿Hay alguna forma de verificar si los métodos estaban enmascarados? Quizás haya una función como esta:
checkMethodMasking(dplyr)
## The following methods are masked from 'package:dplyr':
## lag.default
NB: no es suficiente tener una advertencia cuando cargodplyr
conrequire(dplyr)
. El método también se sobrecarga si solo cargo el espacio de nombres sin adjuntar el paquete (por ejemplo, llamodplyr::mutate
, o incluso uso una función de otro paquete que llama a undplyr
función que fue importada usandoimportFrom
)