Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的掩蔽-来自新包的混淆行为_R_Oop_Namespaces - Fatal编程技术网

R中的掩蔽-来自新包的混淆行为

R中的掩蔽-来自新包的混淆行为,r,oop,namespaces,R,Oop,Namespaces,当我第一次附加包ffbase时,它提醒我,%和表中的%函数正在被基本包屏蔽。我经常使用这两个函数,所以我立即研究了这意味着什么,我不确定我是否理解这里发生的事情 据我所知,对于表,这意味着添加了一个新方法: methods(table) [1] table.default* table.ff 对于%中的%,它确实被覆盖,因此默认为ff版本,其中base播放备份: getAnywhere(`%in%`) 2 differing objects matching '%in%' were found

当我第一次附加包
ffbase
时,它提醒我,%和
表中的
%函数正在被基本包屏蔽。我经常使用这两个函数,所以我立即研究了这意味着什么,我不确定我是否理解这里发生的事情

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

methods(table)
[1] table.default* table.ff
对于%
中的
%,它确实被覆盖,因此默认为
ff
版本,其中
base
播放备份:

getAnywhere(`%in%`)
2 differing objects matching '%in%' were found in the following places
package::ffbase
package:base
namespace:base
namespace:ffbase
我现在有两个问题。第一个是-如果一个新方法添加了一个S3泛型,那么为什么需要警告屏蔽?在我看来,
并没有真正被屏蔽,因为R不只是找出我拥有的数据类型并分派正确的方法吗

第二,如果您确实覆盖了一个函数,那么如果我在没有指定正确名称空间的情况下执行基本功能,为什么它仍然有效

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

x软件包维护人员在屏蔽
base
功能时应该而且通常会非常小心。您可以始终查看定义的代码-
ffbase::“%in%”
,并查看它是否检查要匹配的项是否是
ffu向量
ffdf
对象,如果不是,则使用正常的
base:“%in%”
定义。您关于
table
是S3泛型的假设是不正确的-您可以查看
base::table
,发现它没有使用S3调度。相反,
ffbase
使iit成为S3通用方法,并将默认方法设置为
base::table
。非常有趣,感谢@Gregor提供的信息性评论。我假设这里要学到的一般经验是,如果包创建者/维护者正在屏蔽库,并且如果您对如何屏蔽感兴趣,那么您应该阅读源代码。因为除此之外,我一直在寻找事物设计的模式,在这个例子中,
ffbase
只是一个有趣的例子,可能无法代表其他人是如何做事情的?作为奖励,我的问题与其他一些关于在R中编写健壮代码的问题联系在一起,这是我在研究时从未见过的。包维护人员在屏蔽
base
函数时应该而且通常会非常小心。您可以始终查看定义的代码-
ffbase::“%in%”
,并查看它是否检查要匹配的项是否是
ffu向量
ffdf
对象,如果不是,则使用正常的
base:“%in%”
定义。您关于
table
是S3泛型的假设是不正确的-您可以查看
base::table
,发现它没有使用S3调度。相反,
ffbase
使iit成为S3通用方法,并将默认方法设置为
base::table
。非常有趣,感谢@Gregor提供的信息性评论。我假设这里要学到的一般经验是,如果包创建者/维护者正在屏蔽库,并且如果您对如何屏蔽感兴趣,那么您应该阅读源代码。因为除此之外,我一直在寻找事物设计的模式,在这个例子中,
ffbase
只是一个有趣的例子,可能无法代表其他人是如何做事情的?作为奖励,我的问题与其他一些关于用R编写健壮代码的问题联系在一起,这是我在研究时从未见过的。