class 位於 base 包(package)。 說明
R擁有簡單的通用函數機製,可用於麵向對象的編程風格。方法調度是根據泛型函數的第一個參數的類進行的。
用法
class(x)
class(x) <- value
unclass(x)
inherits(x, what, which = FALSE)
nameOfClass(x)
isa(x, what)
oldClass(x)
oldClass(x) <- value
.class2(x)
參數
x |
a R對象 |
what , value |
命名類的字符向量。 |
which |
影響返回值的邏輯:參見“詳細信息”。 |
細節
在這裏,我們說明所謂的“S3”類(和方法)。對於 “S4” 類(和方法),請參閱下麵的“正式類”。
許多R對象有一個classattribute,一個字符向量,給出對象所屬類的名稱繼承。 (函數oldClass和oldClass<-獲取和設置屬性,也可以直接完成。)
如果對象沒有類屬性,則它具有隱式類,特別是 "matrix" 、 "array" 、 "function" 或 "numeric" 或 typeof(x) 的結果(類似於 mode(x) ),但是對於類型 "language" 和 mode "call" ,其中對應函數 call 存在以下額外類: if , while , for , = , <- , ( , { , call 。
請注意,對於對象x隱式(或 S4)類的,當(S3)泛型函數foo(x)被調用時,方法調度可能使用比返回的更多的類class(x),例如,對於數字矩陣,foo.numeric()方法可適用。準確完整character類的向量UseMethod()使用,可作為.class2(x)自從R版本 4.0.0。 (當考慮 S3 調度時,這也適用於 S4 對象,請參見下文。)
請注意,出於教學、診斷或調試以外的其他原因使用 .class2() 可能是一種誤用,而不是明智之舉。
NULL 對象(隱式類 "NULL" )不能具有屬性(因此沒有 class 屬性),並且嘗試分配類是錯誤的。
當通用函數 fun 應用於具有類屬性 c("first", "second") 的對象時,係統會搜索名為 fun.first 的函數,如果找到,則將其應用於該對象。如果沒有找到這樣的函數,則會嘗試名為fun.second 的函數。如果沒有類名產生合適的函數,則使用函數fun.default(如果存在)。如果沒有class屬性,則嘗試隱式類,然後使用默認方法。
函數 class 打印對象繼承的類名稱向量。相應地,class<- 設置對象繼承的類。分配空字符向量或 NULL 會刪除類屬性,就像 oldClass<- 或直接屬性設置一樣。雖然顯式分配 NULL 來刪除該類更清楚,但在例如 class(x) <- setdiff(class(x), "ts") 中使用空向量更自然。
unclass 返回其參數(的副本),並刪除其類屬性。 (對於無法複製的對象,即環境和外部指針,不允許這樣做。)
inherits 指示其第一個參數是否繼承自 what 參數中指定的任何類。如果which 是TRUE,則返回與what 長度相同的整數向量。每個元素表示class(x)中與what的元素匹配的位置;零表示不匹配。如果 which 是 FALSE,則 TRUE 由 inherits 返回(如果 what 中的任何名稱與任何 class 匹配)。
nameOfClass 是 S3 泛型。 inherits 調用它來獲取 what 的類名,從而允許 what 為字符向量以外的值。 nameOfClass 方法預計返回長度為 1 的字符向量。
如果 x 是 S4 對象,則 isa 使用 is 測試 x 是否為 what 中給出的類的對象。否則給出 TRUE 當且僅當 class(x) 的所有元素都包含在 what 中。
除inherits 和isa 之外的所有函數都是primitive 函數。
正式課程
默認情況下附加的包 methods 中提供了正式類的附加機製,昵稱“S4”。對於具有正式類的對象,其名稱由 class 作為長度為 1 的字符向量返回,並且方法分派可以在多個參數上進行,而不僅僅是第一個參數。但是,S3 方法選擇嘗試將 S4 類中的對象視為具有適當的 S3 類屬性,就像 inherits 一樣。因此,可以為S4類定義S3方法。有關 S4 方法的基本信息以及這些方法與 S3 方法之間的關係,請參閱“Introduction”和“Methods_for_S3”幫助頁麵。
該函數的替換版本將類設置為提供的值。對於具有正式定義的類,強烈反對以這種方式直接替換類。表達式 as(object, value) 是將對象強製為特定類的方法。
正式類的 inherits 的類似物是 is 。這兩個函數的行為一致,但有一個異常:S4 類可以通過顯式測試進行條件繼承。在這種情況下,is 將測試條件,但 inherits 忽略所有條件超類。
注意
職能oldClass和oldClass<-其行為方式與 S-PLUS 5/6 中這些名稱的函數相同,但在R
UseMethod調度返回的類class(對於一些插值類:請參閱鏈接)而不是oldClass.然而,base groupGenerics 調度oldClass為了效率,以及內部通用s 僅調度對象is.object是真的。
例子
x <- 10
class(x) # "numeric"
oldClass(x) # NULL
inherits(x, "a") #FALSE
class(x) <- c("a", "b")
inherits(x,"a") #TRUE
inherits(x, "a", TRUE) # 1
inherits(x, c("a", "b", "c"), TRUE) # 1 2 0
class( quote(pi) ) # "name"
## regular calls
class( quote(sin(pi*x)) ) # "call"
## special calls
class( quote(x <- 1) ) # "<-"
class( quote((1 < 2)) ) # "("
class( quote( if(8<3) pi ) ) # "if"
.class2(pi) # "double" "numeric"
.class2(matrix(1:6, 2,3)) # "matrix" "array" "integer" "numeric"
也可以看看
相關用法
- R chartr 字符翻譯和裝箱
- R chol2inv Cholesky(或 QR)分解的逆分解
- R cumsum 累積和、乘積和極值
- R col 列索引
- R character 字符向量
- R c 將值組合到向量或列表中
- R conditions 狀況處理和恢複
- R cut 將數字轉換為因子
- R connections 操作連接的函數(文件、URL...)
- R comment 查詢或設置“評論”屬性
- R complex 複數和基本函數
- R chooseOpsMethod 選擇適當的操作方法
- R colSums 形成行和列的總和及平均值
- R chol 喬列斯基分解
- R commandArgs 提取命令行參數
- R cbind 按行或列組合 R 對象
- R crossprod 矩陣叉積
- R curlGetHeaders 從 URL 中檢索標頭
- R cat 連接並打印
- R capabilities 此 R 版本的報告函數
- R callCC 調用當前延續
- R call 函數調用
- R charmatch 部分字符串匹配
- R chkDots 警告調用者的“...”中存在無關參數
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Object Classes。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
