StructureClasses
位於 methods
包(package)。 說明
虛擬類structure
及其擴展類是類似於S語言結構(例如數組和時間序列)的正式類。
用法
## The following class names can appear in method signatures,
## as the class in as() and is() expressions, and, except for
## the classes commented as VIRTUAL, in calls to new()
"matrix"
"array"
"ts"
"structure" ## VIRTUAL
類中的對象
可以通過 new(Class, ...)
形式的調用來創建對象,其中 Class
是特定類的帶引號的名稱(例如 "matrix"
),其他參數(如果有)將被解釋為相應函數的參數,例如,函數 matrix()
。與直接調用這些函數相比,沒有什麽特別的優勢,除非您正在編寫設計用於多個類的軟件,可能需要傳入類名和參數。
溫和地說,從"matrix"
和"array"
類創建的對象很不尋常,而且這種情況已經有一段時間了。盡管它們可能看起來是這些類的對象,但它們不具有 S3 或 S4 類對象的內部結構。特別是,它們沒有 "class"
屬性,並且不會被識別為具有類的對象(即,is.object
和 isS4
都將為此類對象返回 FALSE
)。但是,可以為這些偽類定義方法(S4 和 S3),並且新類(S4 和 S3)可以從它們繼承。
這些對象的行為仍然像來自相應的類(無論如何,大多數時候)是由於識別這些對象的特殊代碼被構建到的基本代碼中R。幸運的是,對於大多數目的來說,以通常的方式對待課程是有效的。特殊待遇的後果之一是這兩類人可能用作 S4 類的數據部分;例如,你可以逃脫contains = "matrix"
在調用中setGeneric
創建一個 S4 類,它是"matrix"
。雖然不能保證一切都會完美運行,但已經成功地以這種形式編寫了許多類。
請注意,包含 "matrix"
或 "array"
的類將具有該類的 .Data
槽。這是 .Data
除了用作指示對象類型的 pseudo-class 之外的唯一用途。在這種情況下,對象的類型將是所包含的矩陣或數組的類型。有關一般討論,請參閱Classes_Details
。
班上"ts"
本質上是一個已在 S4 中注冊的 S3 類,使用setOldClass
機製。版本R到 2.7.0 都將此類視為純 S4 類,這原則上是個好主意,但實際上不允許定義子類,並且存在其他固有問題。 (例如,設置"tsp"
將參數作為槽經常會失敗,因為內置實現不允許槽暫時與數據的長度不一致。此外,S4 類阻止了類的 S3 繼承的正確規範"mts"
.)
與矩陣和數組相比,時間序列對象具有有效的 S3 類 "ts"
,使用 S4 樣式定義進行注冊(有關如何完成此操作的簡短列表,請參閱示例部分中的 setOldClass
文檔)。包 stats
中的 "mts"
的 S3 繼承也已注冊。這些類以及 "matrix"
和 "array"
在大多數示例中作為新 S4 類定義的超類應該有效。
所有這些類都有 initialize
的特殊 S4 方法,它們盡可能接受與基本生成器函數 matrix
、 array
和 ts
相同的參數。限製是具有多個非虛擬超類的類必須在調用 new
時接受來自該超類的對象;因此,這樣的類(在某些語言中稱為 “mixin”)使用 initialize
的默認方法,沒有特殊參數。
擴展
具體類都直接擴展類 "structure"
,並通過類 "structure"
擴展類 "vector"
。
方法
- 強製
-
定義方法來通過調用相應的基本函數將任意對象強製到這些類,例如
as(x, "matrix")
調用as.matrix(x)
。如果strict = TRUE
位於對as()
的調用中,則該方法將繼續刪除除dim
和dimnames
之外的所有其他槽和屬性。 - 行動
-
組方法(例如,參見
S4groupGeneric
)是針對結構和向量的組合(包括數組和矩陣的特殊情況)定義的,實現了參考文獻中向量結構的概念。本質上,隻要生成的對象具有相同的長度,結構與向量的組合就會保留結構。與其他結構組合的結構會刪除該結構,因為沒有自動方法來確定定義該結構的槽應該發生什麽。請注意,當加載包含繼承自任何結構類或類
"vector"
的類的包時,這些方法將被激活。
例子
showClass("structure")
## explore a bit :
showClass("ts")
(ts0 <- new("ts"))
str(ts0)
showMethods("Ops") # six methods from these classes, but maybe many more
參考
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.)
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole (for the original vector structures).
也可以看看
類 nonStructure ,強製執行替代模型,其中如果將任何數學轉換或運算應用於擴展基本類之一的類中的對象,則所有槽都會被刪除。
相關用法
- R S4groupGeneric S4組通用函數
- R S3Part 包含 S3 類的 S4 類
- R as 強製對象屬於某個類
- R language-class 表示未評估語言對象的類
- R className 類名包含對應的包
- R BasicClasses 基本數據類型對應的類
- R callGeneric 從方法調用當前通用函數
- R findClass 查找類定義
- R setOldClass 注冊舊式 (S3) 類和繼承
- R ReferenceClasses 具有按引用處理的字段的對象(OOP 樣式)
- R MethodsList 方法列表對象
- R setGroupGeneric 創建函數的組通用版本
- R showMethods 顯示指定函數或類的所有方法
- R getMethod 獲取或測試方法的定義
- R slot 正式類對象中的槽
- R methodUtilities 用於方法和 S-Plus 兼容性的實用函數
- R getClass 獲取類定義
- R evalSource 使用源文件中的函數定義,無需重新安裝包
- R is 對象是來自類嗎?
- R isSealedMethod 檢查密封方法或類
- R cbind2 按列或行組合兩個對象
- R GenericFunctions 管理通用函數的工具
- R dotsMethods 在方法簽名中使用...
- R nonStructure-class 基本類型的非結構 S4 類
- R selectSuperClasses 類的超類(特定類型)
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Classes Corresponding to Basic Structures。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。