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