is
位于 methods
包(package)。 说明
用于测试对象和类之间或两个类之间的继承关系的函数 (extends
)。
用法
is(object, class2)
extends(class1, class2, maybe = TRUE, fullInfo = FALSE)
参数
object |
任何R对象。 |
class1, class2 |
给出要检查 |
fullInfo |
在对 |
maybe |
有条件继承返回什么。但这种关系很少使用,也不推荐,因此不需要这个论点。 |
选择超类
对 selectSuperClasses(cl)
的调用会返回超类列表,类似于 extends(cl)
。附加参数将返回的类名限制为直接超类和/或非虚拟类。
无论哪种方式,使用结果进行编程,特别是使用 sapply
,都是有用的。
要查找具有更通用定义属性的超类,可以使用 extends
在以一个类作为参数调用时返回的结果进行编程。默认情况下,调用返回一个字符向量,其中包括类本身及其所有超类的名称。或者,如果使用 fullInfo =
TRUE
调用 extends
,则返回值是一个命名列表,其名称是前一个字符向量。与超类相对应的列表的元素是类 SClassExtension
的对象。在这些对象中的信息中,有一项可能有用:类之间的代数,由 "distance"
槽给出。
使用 extends
调用的结果进行编程,特别是使用 sapply
,可以选择超类。编程技术是定义一个测试函数,该函数为遵守某些要求的超类或关系返回TRUE
。例如,要仅查找 next-to-direct 超类,请将此函数与扩展对象列表一起使用:
function(what) is(what, "SClassExtension") && what@distance == 2
或者,要仅查找 "myPkg"
中的超类,请将此函数与简单的名称向量结合使用:
function(what) getClassDef(what)@package == "myPkg"
将此类函数作为参数提供给在 extends
的输出上调用的 sapply
,可以让您找到具有所需属性的超类。请参阅下面的示例。
请注意,使用扩展对象的函数必须测试其参数的类,因为不幸的是,为此目的, extends
返回的列表包括 class1
本身,作为对象 TRUE
。
注意
之前R4.2.0 代码使用了第一个元素class1
和class2
,默默地,现在要求这些是长度为一的字符向量。
例子
## Not run:
## this example can be run if package XRPython from CRAN is installed.
supers <- extends("PythonInterface")
## find all the superclasses from package XR
fromXR <- sapply(supers,
function(what) getClassDef(what)@package == "XR")
## print them
supers[fromXR]
## find all the superclasses at distance 2
superRelations <- extends("PythonInterface", fullInfo = TRUE)
dist2 <- sapply(superRelations,
function(what) is(what, "SClassExtension") && what@distance == 2)
## print them
names(superRelations)[dist2]
## End(Not run)
参考
Chambers, John M. (2016) Extending R, Chapman & Hall. (Chapters 9 and 10.)
也可以看看
虽然 inherits
是为 S3 类定义的,但它已被修改,以便返回的结果几乎总是等于 is
,无论是对于 S4 还是非 S4 对象。由于它是用C实现的,所以速度要快一些。唯一的不等价性是由于使用 setIs
引起的,这种情况很少会遇到。
相关用法
- R isSealedMethod 检查密封方法或类
- R implicitGeneric 管理通用函数的隐式版本
- R inheritedSlotNames 从超级类继承的插槽名称
- R as 强制对象属于某个类
- R language-class 表示未评估语言对象的类
- R className 类名包含对应的包
- R BasicClasses 基本数据类型对应的类
- R callGeneric 从方法调用当前通用函数
- R findClass 查找类定义
- R setOldClass 注册旧式 (S3) 类和继承
- R ReferenceClasses 具有按引用处理的字段的对象(OOP 样式)
- R MethodsList 方法列表对象
- R setGroupGeneric 创建函数的组通用版本
- R StructureClasses 基本结构对应的类
- R showMethods 显示指定函数或类的所有方法
- R getMethod 获取或测试方法的定义
- R slot 正式类对象中的槽
- R S4groupGeneric S4组通用函数
- R methodUtilities 用于方法和 S-Plus 兼容性的实用函数
- R getClass 获取类定义
- R evalSource 使用源文件中的函数定义,无需重新安装包
- R cbind2 按列或行组合两个对象
- R GenericFunctions 管理通用函数的工具
- R dotsMethods 在方法签名中使用...
- R S3Part 包含 S3 类的 S4 类
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Is an Object from a Class?。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。