Ric*_*ton 19 inheritance r r-faq
如果我想检查变量是否继承自某个类,我可以使用is
或inherits
.
class(letters)
## [1] "character"
is(letters, "character")
## [1] TRUE
inherits(letters, "character")
## [1] TRUE
Run Code Online (Sandbox Code Playgroud)
我是否应该选择使用哪一种,并且它们是否会返回不同的值?
Ric*_*ton 13
精简版:
使用inherits
,但要注意数字和S4类.
更长的版本:
从is
帮助页面的"另请参阅"部分:
继承几乎总是等同于S4,对于S4和非S4对象,并且有点快.非等价适用于具有条件超类的类,在关系中具有非平凡的测试=(不常见且不鼓励):对于这些,是对关系的测试,但是通过定义继承忽略S4对象的条件继承.
从inherits
帮助页面的"正式类"部分:
正式类的继承类似物是.这两个函数的行为一致,但有一个例外:S4类可以具有条件继承,并具有显式测试.在这种情况下,将测试条件,但继承忽略所有条件超类.
所以他们大多返回相同的东西,但inherits
速度更快,因此在大多数情况下它应该是默认选择.(如Konrad所述,is
还要求methods
加载包,这可能使其不适合性能敏感的用途Rscript
.)
如果您使用带有条件继承的S4类,则值可能不同,但不建议这样做(请参阅"方法选择和调度:详细信息"部分),这意味着它很少见.
两个函数不同的最明显的地方是检查整数是否为数字.
class(1L)
## [1] "integer"
is.numeric(1L)
## [1] TRUE
is(1L, "numeric")
## [1] TRUE
inherits(1L, "numeric")
## [1] FALSE
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5991 次 |
最近记录: |