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但这需要我知道dplyr是否更改了默认的lag方法。有没有办法检查方法是否被屏蔽了?也许有这样一个函数:
checkMethodMasking(dplyr)
## The following methods are masked from 'package:dplyr':
## lag.default注意:当我用require(dplyr)加载dplyr时,仅仅有一个警告是不够的。如果我只是加载名称空间而不附加包(例如,我调用dplyr::mutate,或者甚至我使用来自另一个包的函数,该包调用使用importFrom导入的dplyr函数),则该方法也会被重载。
发布于 2020-02-22 06:15:11
conflicted包(请参阅here)现在为这个问题提供了一个潜在的解决方案。加载conflicted后,您会得到有关函数名冲突的更明确的错误消息。您还可以使用conflict_prefer (details here)来指定默认情况下要使用的包的函数以及应该屏蔽的函数。
例如,这是我在尝试使用nFactors包中的函数parallel时遇到的一个最新错误:
# Error: [conflicted] `parallel` found in 2 packages.
# Either pick the one you want with `::`
# * nFactors::parallel
# * lattice::parallel
# Or declare a preference with `conflict_prefer()`
# * conflict_prefer("parallel", "nFactors")
# * conflict_prefer("parallel", "lattice")然后我添加了
conflict_prefer("parallel", "nFactors") 在代码之后,在脚本的开头装入我的库,以确保parallel将在我的代码中调用nFactors::parallel。
https://stackoverflow.com/questions/30641471
复制相似问题