首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的掩码方法

问R中的掩码方法
EN

Stack Overflow用户
提问于 2015-06-04 18:31:45
回答 1查看 2.5K关注 0票数 17

This question,特别是this answer提出了以下问题:我如何才能得到关于R中方法屏蔽的警告?

如果您在一个干净的R会话中运行以下代码,您会注意到加载dplyr会更改lag的默认方法。

代码语言:javascript
复制
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包中的泛型函数。

代码语言:javascript
复制
lag
## function (x, ...) 
## UseMethod("lag")
## <bytecode: 0x000000000c072188>
## <environment: namespace:stats>

methods(lag)只是告诉我有一个方法lag.default。我可以看到使用getAnywhere的方法有两种:

代码语言:javascript
复制
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方法。有没有办法检查方法是否被屏蔽了?也许有这样一个函数:

代码语言:javascript
复制
checkMethodMasking(dplyr)
## The following methods are masked from 'package:dplyr':
##    lag.default

注意:当我用require(dplyr)加载dplyr时,仅仅有一个警告是不够的。如果我只是加载名称空间而不附加包(例如,我调用dplyr::mutate,或者甚至我使用来自另一个包的函数,该包调用使用importFrom导入的dplyr函数),则该方法也会被重载。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-22 06:15:11

conflicted包(请参阅here)现在为这个问题提供了一个潜在的解决方案。加载conflicted后,您会得到有关函数名冲突的更明确的错误消息。您还可以使用conflict_prefer (details here)来指定默认情况下要使用的包的函数以及应该屏蔽的函数。

例如,这是我在尝试使用nFactors包中的函数parallel时遇到的一个最新错误:

代码语言:javascript
复制
# 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")

然后我添加了

代码语言:javascript
复制
conflict_prefer("parallel", "nFactors") 

在代码之后,在脚本的开头装入我的库,以确保parallel将在我的代码中调用nFactors::parallel。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30641471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档