slot
位于 methods
包(package)。 说明
这些函数返回或设置有关对象中各个插槽的信息。
用法
object@name
object@name <- value
slot(object, name)
slot(object, name, check = TRUE) <- value
.hasSlot(object, name)
slotNames(x)
.slotNames(x)
getSlots(x)
参数
object |
来自正式定义的类的对象。 |
name |
插槽的名称。该运算符采用固定名称,如果它在语法上是该语言中的名称,则可以不加引号。槽名称可以是任何非空字符串,但如果名称不是由字母、数字和 对于 |
value |
指定槽的新值。该值对于该对象类中的该槽必须有效。 |
check |
在 |
x |
类的名称(作为字符串)或类定义。如果给定的参数既不是字符串也不是类定义,则 |
细节
类的定义指定了为该类直接和间接定义的所有槽。每个槽都有一个名称和一个关联的类。提取槽会返回该类的一个对象。设置槽首先将值强制到指定槽,然后存储它。
与一般属性不同,槽不是部分匹配的,并且要求(或尝试设置)具有该类的无效名称的槽会生成错误。
@
提取运算符和 slot
函数本身不检查类定义,只是匹配对象本身中的名称。替换表单会进行检查(check=FALSE
情况下的 slot
除外)。只要设置的槽位没有作弊,提取的槽位就是有效的。
请注意,有两种作弊方式,两种方式都可以避免,但不能保证。最明显的方法是分配一个插槽check=FALSE
。另外,插槽R为了向后兼容,它们被实现为属性。当前的实现不会阻止属性被分配,通过attr<-
,并且不会检查此类分配的合法插槽名称。
请注意,用于提取和替换的 "@"
运算符是原始的,实际上驻留在 base
包中。
"@"
和 slot()
的替换版本在将赋值的右侧强制为槽的声明类时所做的计算有所不同。两者都验证提供的值是否来自声明的槽类的子类。 slot()
版本将继续调用强制方法(如果有),实际上执行计算 as(value, slotClass, strict =
FALSE)
。 "@"
版本仅验证关系,将任何强制留在稍后完成(例如,当分派相关方法时)。
在大多数用途中,结果是等效的,并且 "@"
版本节省了额外的函数调用,但如果经验证据表明需要转换,则可以在替换之前调用 as()
或使用 slot()
的替换版本。
值
"@"
运算符和 slot
函数提取或替换对象的正式定义的槽。
函数slotNames
和getSlots
分别返回槽的名称以及与指定类定义中的槽关联的类。除了 x
的扩展解释(上面)之外,slotNames(x)
只是 names(getSlots(x))
。
例子
setClass("track", slots = c(x="numeric", y="numeric"))
myTrack <- new("track", x = -4:4, y = exp(-4:4))
slot(myTrack, "x")
slot(myTrack, "y") <- log(slot(myTrack, "y"))
utils::str(myTrack)
getSlots("track") # or
getSlots(getClass("track"))
slotNames(class(myTrack)) # is the same as
slotNames(myTrack)
## Transform such an S4 object to a list, e.g. to "export" it:
S4toList <- function(obj) {
sn <- slotNames(obj)
structure(lapply(sn, slot, object = obj), names = sn)
}
S4toList(myTrack)
参考
Chambers, John M. (2008) Software for Data Analysis: Programming with R Springer. (For the R version.)
Chambers, John M. (1998) Programming with Data Springer (For the original S4 version.)
也可以看看
相关用法
- R setOldClass 注册旧式 (S3) 类和继承
- R setGroupGeneric 创建函数的组通用版本
- R showMethods 显示指定函数或类的所有方法
- R selectSuperClasses 类的超类(特定类型)
- R setClass 创建类定义
- R setGeneric 创建函数的通用版本
- R setAs 将对象强制为类的方法
- R setMethod 创建并保存方法
- R setClassUnion 定义为其他类的联合的类
- R show 显示对象
- R setIs 显式指定超类
- R setLoadActions 设置包加载操作
- R as 强制对象属于某个类
- R language-class 表示未评估语言对象的类
- R className 类名包含对应的包
- R BasicClasses 基本数据类型对应的类
- R callGeneric 从方法调用当前通用函数
- R findClass 查找类定义
- R ReferenceClasses 具有按引用处理的字段的对象(OOP 样式)
- R MethodsList 方法列表对象
- R StructureClasses 基本结构对应的类
- R getMethod 获取或测试方法的定义
- R S4groupGeneric S4组通用函数
- R methodUtilities 用于方法和 S-Plus 兼容性的实用函数
- R getClass 获取类定义
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 The Slots in an Object from a Formal Class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。