【发布时间】:2015-08-18 22:11:50
【问题描述】:
This question 尤其是this answer 提出了以下问题:如何获得有关 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
注意:当我用require(dplyr) 加载dplyr 时,只有警告是不够的。如果我只加载命名空间而不附加包(例如,我调用dplyr::mutate,或者甚至我使用另一个包中的一个函数,该函数调用使用importFrom 导入的dplyr 函数),该方法也会过载。
【问题讨论】:
-
FWIW dplyr 在下一个版本中不会覆盖该方法