Этот вопрос, и в частности этот ответ поднял следующий вопрос: как я могу получить предупреждение о маскировке методов в 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, вы получаете предупреждения для нескольких объектов с маскировкой, но никаких предупреждений о методе по умолчанию для 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
Примечание. Недостаточно иметь предупреждение при загрузке dplyr с помощью require(dplyr). Метод также перегружается, если я просто загружаю пространство имен без присоединения пакета (например, я вызываю dplyr::mutate, или даже использую функцию из другого пакета, который вызывает функцию dplyr, которая была импортирована с помощью importFrom)).