class 位于 base 包(package)。 说明
R拥有简单的通用函数机制,可用于面向对象的编程风格。方法调度是根据泛型函数的第一个参数的类进行的。
用法
class(x)
class(x) <- value
unclass(x)
inherits(x, what, which = FALSE)
nameOfClass(x)
isa(x, what)
oldClass(x)
oldClass(x) <- value
.class2(x)
参数
x |
a R对象 |
what , value |
命名类的字符向量。 |
which |
影响返回值的逻辑:参见“详细信息”。 |
细节
在这里,我们说明所谓的“S3”类(和方法)。对于 “S4” 类(和方法),请参阅下面的“正式类”。
许多R对象有一个classattribute,一个字符向量,给出对象所属类的名称继承。 (函数oldClass和oldClass<-获取和设置属性,也可以直接完成。)
如果对象没有类属性,则它具有隐式类,特别是 "matrix" 、 "array" 、 "function" 或 "numeric" 或 typeof(x) 的结果(类似于 mode(x) ),但是对于类型 "language" 和 mode "call" ,其中对应函数 call 存在以下额外类: if , while , for , = , <- , ( , { , call 。
请注意,对于对象x隐式(或 S4)类的,当(S3)泛型函数foo(x)被调用时,方法调度可能使用比返回的更多的类class(x),例如,对于数字矩阵,foo.numeric()方法可适用。准确完整character类的向量UseMethod()使用,可作为.class2(x)自从R版本 4.0.0。 (当考虑 S3 调度时,这也适用于 S4 对象,请参见下文。)
请注意,出于教学、诊断或调试以外的其他原因使用 .class2() 可能是一种误用,而不是明智之举。
NULL 对象(隐式类 "NULL" )不能具有属性(因此没有 class 属性),并且尝试分配类是错误的。
当通用函数 fun 应用于具有类属性 c("first", "second") 的对象时,系统会搜索名为 fun.first 的函数,如果找到,则将其应用于该对象。如果没有找到这样的函数,则会尝试名为fun.second 的函数。如果没有类名产生合适的函数,则使用函数fun.default(如果存在)。如果没有class属性,则尝试隐式类,然后使用默认方法。
函数 class 打印对象继承的类名称向量。相应地,class<- 设置对象继承的类。分配空字符向量或 NULL 会删除类属性,就像 oldClass<- 或直接属性设置一样。虽然显式分配 NULL 来删除该类更清楚,但在例如 class(x) <- setdiff(class(x), "ts") 中使用空向量更自然。
unclass 返回其参数(的副本),并删除其类属性。 (对于无法复制的对象,即环境和外部指针,不允许这样做。)
inherits 指示其第一个参数是否继承自 what 参数中指定的任何类。如果which 是TRUE,则返回与what 长度相同的整数向量。每个元素表示class(x)中与what的元素匹配的位置;零表示不匹配。如果 which 是 FALSE,则 TRUE 由 inherits 返回(如果 what 中的任何名称与任何 class 匹配)。
nameOfClass 是 S3 泛型。 inherits 调用它来获取 what 的类名,从而允许 what 为字符向量以外的值。 nameOfClass 方法预计返回长度为 1 的字符向量。
如果 x 是 S4 对象,则 isa 使用 is 测试 x 是否为 what 中给出的类的对象。否则给出 TRUE 当且仅当 class(x) 的所有元素都包含在 what 中。
除inherits 和isa 之外的所有函数都是primitive 函数。
正式课程
默认情况下附加的包 methods 中提供了正式类的附加机制,昵称“S4”。对于具有正式类的对象,其名称由 class 作为长度为 1 的字符向量返回,并且方法分派可以在多个参数上进行,而不仅仅是第一个参数。但是,S3 方法选择尝试将 S4 类中的对象视为具有适当的 S3 类属性,就像 inherits 一样。因此,可以为S4类定义S3方法。有关 S4 方法的基本信息以及这些方法与 S3 方法之间的关系,请参阅“Introduction”和“Methods_for_S3”帮助页面。
该函数的替换版本将类设置为提供的值。对于具有正式定义的类,强烈反对以这种方式直接替换类。表达式 as(object, value) 是将对象强制为特定类的方法。
正式类的 inherits 的类似物是 is 。这两个函数的行为一致,但有一个异常:S4 类可以通过显式测试进行条件继承。在这种情况下,is 将测试条件,但 inherits 忽略所有条件超类。
注意
职能oldClass和oldClass<-其行为方式与 S-PLUS 5/6 中这些名称的函数相同,但在R
UseMethod调度返回的类class(对于一些插值类:请参阅链接)而不是oldClass.然而,base groupGenerics 调度oldClass为了效率,以及内部通用s 仅调度对象is.object是真的。
例子
x <- 10
class(x) # "numeric"
oldClass(x) # NULL
inherits(x, "a") #FALSE
class(x) <- c("a", "b")
inherits(x,"a") #TRUE
inherits(x, "a", TRUE) # 1
inherits(x, c("a", "b", "c"), TRUE) # 1 2 0
class( quote(pi) ) # "name"
## regular calls
class( quote(sin(pi*x)) ) # "call"
## special calls
class( quote(x <- 1) ) # "<-"
class( quote((1 < 2)) ) # "("
class( quote( if(8<3) pi ) ) # "if"
.class2(pi) # "double" "numeric"
.class2(matrix(1:6, 2,3)) # "matrix" "array" "integer" "numeric"
也可以看看
相关用法
- R chartr 字符翻译和装箱
- R chol2inv Cholesky(或 QR)分解的逆分解
- R cumsum 累积和、乘积和极值
- R col 列索引
- R character 字符向量
- R c 将值组合到向量或列表中
- R conditions 状况处理和恢复
- R cut 将数字转换为因子
- R connections 操作连接的函数(文件、URL...)
- R comment 查询或设置“评论”属性
- R complex 复数和基本函数
- R chooseOpsMethod 选择适当的操作方法
- R colSums 形成行和列的总和及平均值
- R chol 乔列斯基分解
- R commandArgs 提取命令行参数
- R cbind 按行或列组合 R 对象
- R crossprod 矩阵叉积
- R curlGetHeaders 从 URL 中检索标头
- R cat 连接并打印
- R capabilities 此 R 版本的报告函数
- R callCC 调用当前延续
- R call 函数调用
- R charmatch 部分字符串匹配
- R chkDots 警告调用者的“...”中存在无关参数
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Object Classes。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
