和遗传有什么区别?

时间:2015-01-13 13:31:13

标签: r inheritance r-faq

如果我想检查一个变量是否继承自某个类,我可以使用isinherits

class(letters)
## [1] "character"
is(letters, "character")
## [1] TRUE
inherits(letters, "character")
## [1] TRUE

我是否应该选择使用哪一种,是否会返回不同的值?

1 个答案:

答案 0 :(得分:13)

简短版本:

使用inherits,但要注意数字和S4类。


更长的版本:

is帮助页面的另请参阅部分:

  对于S4和非S4,

继承几乎总是等同于   对象,并且有点快。不等同适用于   具有条件超类的类,具有非平凡的测试=   在这种关系中(不常见和不鼓励):对于这些,是为了测试   关系,但按定义继承忽略条件   继承S4对象。

inherits帮助页面的正式课程部分:

  

正式类的继承类似物是。这两个功能   行为一致有一个例外:S4类可以有   条件继承,带有显式测试。在这种情况下,是的   测试条件,但是inherits忽略所有条件超类。

所以他们大多返回相同的东西,但是inherits更快,所以在大多数情况下它应该是默认选择。 (正如Konrad所述,is还要求加载methods包,这可能使其不适合Rscript的性能敏感用途。)

如果您使用带有条件继承的S4类,则值可能不同,但这是not recommended(请参阅“方法选择和调度:详细信息”部分),这意味着它很少见。

两个函数不同的最明显的地方是检查整数是否为数字。

class(1L)
## [1] "integer"
is.numeric(1L)
## [1] TRUE
is(1L, "numeric")
## [1] TRUE
inherits(1L, "numeric")
## [1] FALSE