當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。