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對象有一個class
attribute,一個字符向量,給出對象所屬類的名稱繼承。 (函數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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。