This question и, в частности this answer, возникли следующие вопросы: Как я могу получить предупреждение о маскировке методов в R?Методы маскирования в R
Если вы выполните следующий код в чистом сеансе R, вы заметите, что загрузка dplyr
изменяет метод по умолчанию для lag
.
lag(1:3, 1)
## [1] 1 2 3
## attr(,"tsp")
## [1] 0 2 1
require(dplyr)
lag(1:3, 1)
## [1] NA 1 2
Если вы приложите пакет dplyr
, вы получите warnigns несколько замаскированных объектов, но никакого предупреждения о методе по умолчанию lag
не маскируется. Причина в том, что при вызове lag
вызывается общая функция из пакета stats
.
lag
## function (x, ...)
## UseMethod("lag")
## <bytecode: 0x000000000c072188>
## <environment: namespace:stats>
И methods(lag)
просто говорит мне, что есть метод lag.default
. Я могу видеть, что есть два метода с использованием getAnywhere
:
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
Но это требует, чтобы я знаю, чтобы проверить, если метод по умолчанию lag
был изменен dplyr
. Есть ли способ проверить, маскированы ли методы? Может быть, есть функция, как это:
checkMethodMasking(dplyr)
## The following methods are masked from 'package:dplyr':
## lag.default
NB: Это не достаточно, чтобы иметь предупреждение, когда я загружаю dplyr
с require(dplyr)
. Метод также перегружается, если я просто загружаю пространство имен без привязки пакета (например, я вызываю dplyr::mutate
или даже пользуюсь функцией из другого пакета, который вызывает функцию dplyr
, которая была импортирована с использованием importFrom
).
FWIW dplyr не переопределяет этот метод в следующей версии – hadley