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


R StructureClasses 基本結構對應的類


R語言 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.objectisS4 都將為此類對象返回 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 方法,它們盡可能接受與基本生成器函數 matrixarrayts 相同的參數。限製是具有多個非虛擬超類的類必須在調用 new 時接受來自該超類的對象;因此,這樣的類(在某些語言中稱為 “mixin”)使用 initialize 的默認方法,沒有特殊參數。

擴展

具體類都直接擴展類 "structure" ,並通過類 "structure" 擴展類 "vector"

方法

強製

定義方法來通過調用相應的基本函數將任意對象強製到這些類,例如 as(x, "matrix") 調用 as.matrix(x) 。如果 strict = TRUE 位於對 as() 的調用中,則該方法將繼續刪除除 dimdimnames 之外的所有其他槽和屬性。

行動

組方法(例如,參見 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-devel大神的英文原創作品 Classes Corresponding to Basic Structures。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。