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对象有一个class
attribute,一个字符向量,给出对象所属类的名称继承。 (函数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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。