屏蔽R - 从新包中混淆行为

时间:2016-09-21 18:14:23

标签: r oop namespaces

当我第一次附加包ffbase时,它提醒我函数%in%table被基本包屏蔽掉了。我使用这两个函数非常多,所以我立即调查了这意味着什么,我不确定我是否理解这里发生了什么。

据我所知,对于table,这意味着添加了一种新方法:

methods(table)
[1] table.default* table.ff

对于%in%,它已被覆盖,因此默认为ff版本,其中base正在播放备份:

getAnywhere(`%in%`)
2 differing objects matching '%in%' were found in the following places
package::ffbase
package:base
namespace:base
namespace:ffbase

我现在有两个问题。第一个是 - 如果添加一个新的方法S3泛型,那么为什么需要警告屏蔽?在我看来,table并没有真正掩盖,因为我不知道我的数据类型是什么,并派出正确的方法?

其次,如果你实际上已经覆盖了一个函数,那么为什么在没有指定正确名称空间的情况下执行基本功能的情况下它仍然可以工作呢?

x <- c(1, 23)
23 %in% x
[1] TRUE

我原以为我需要使用base::%in%才能做到这一点?

我认为这第二个问题实际上归结为 - 当涉及到泛型方法调度时,我相信R,因为拥有一个类的意义是提供一些方法来表示你应该使用哪种方法。但是如果你有这个系统,其中包函数(不与类相关)只是按照包加载的顺序加载,那么我不明白R知道它遇到的第一个是什么时候不能工作?

0 个答案:

没有答案