当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R slot 正式类对象中的槽


R语言 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

插槽的名称。该运算符采用固定名称,如果它在语法上是该语言中的名称,则可以不加引号。槽名称可以是任何非空字符串,但如果名称不是由字母、数字和 . 组成,则需要用引号引起来(通过反引号或单引号或双引号)。

对于 slot 函数,name 可以是计算结果为类定义中的有效槽的任何表达式。一般来说,使用函数形式而不是更简单的运算符的唯一原因是必须计算槽名称。

value

指定槽的新值。该值对于该对象类中的该槽必须有效。

check

slot 的替换版本中,一个标志。如果是 TRUE ,则检查分配的值作为该槽的值的有效性。在正常使用中,用户代码不应将其设置为 FALSE,因为生成的对象可能无效。

x

类的名称(作为字符串)或类定义。如果给定的参数既不是字符串也不是类定义,则slotNames(仅)使用class(x) 代替。

细节

类的定义指定了为该类直接和间接定义的所有槽。每个槽都有一个名称和一个关联的类。提取槽会返回该类的一个对象。设置槽首先将值强制到指定槽,然后存储它。

与一般属性不同,槽不是部分匹配的,并且要求(或尝试设置)具有该类的无效名称的槽会生成错误。

@ 提取运算符和 slot 函数本身不检查类定义,只是匹配对象本身中的名称。替换表单会进行检查(check=FALSE 情况下的 slot 除外)。只要设置的槽位没有作弊,提取的槽位就是有效的。

请注意,有两种作弊方式,两种方式都可以避免,但不能保证。最明显的方法是分配一个插槽check=FALSE。另外,插槽R为了向后兼容,它们被实现为属性。当前的实现不会阻止属性被分配,通过attr<-,并且不会检查此类分配的合法插槽名称。

请注意,用于提取和替换的 "@" 运算符是原始的,实际上驻留在 base 包中。

"@"slot() 的替换版本在将赋值的右侧强制为槽的声明类时所做的计算有所不同。两者都验证提供的值是否来自声明的槽类的子类。 slot() 版本将继续调用强制方法(如果有),实际上执行计算 as(value, slotClass, strict = FALSE)"@" 版本仅验证关系,将任何强制留在稍后完成(例如,当分派相关方法时)。

在大多数用途中,结果是等效的,并且 "@" 版本节省了额外的函数调用,但如果经验证据表明需要转换,则可以在替换之前调用 as() 或使用 slot() 的替换版本。

"@" 运算符和 slot 函数提取或替换对象的正式定义的槽。

函数slotNamesgetSlots 分别返回槽的名称以及与指定类定义中的槽关联的类。除了 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.)

也可以看看

@Classes_DetailsMethods_DetailsgetClassnames

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 The Slots in an Object from a Formal Class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。