is
位於 methods
包(package)。 說明
用於測試對象和類之間或兩個類之間的繼承關係的函數 (extends
)。
用法
is(object, class2)
extends(class1, class2, maybe = TRUE, fullInfo = FALSE)
參數
object |
任何R對象。 |
class1, class2 |
給出要檢查 |
fullInfo |
在對 |
maybe |
有條件繼承返回什麽。但這種關係很少使用,也不推薦,因此不需要這個論點。 |
選擇超類
對 selectSuperClasses(cl)
的調用會返回超類列表,類似於 extends(cl)
。附加參數將返回的類名限製為直接超類和/或非虛擬類。
無論哪種方式,使用結果進行編程,特別是使用 sapply
,都是有用的。
要查找具有更通用定義屬性的超類,可以使用 extends
在以一個類作為參數調用時返回的結果進行編程。默認情況下,調用返回一個字符向量,其中包括類本身及其所有超類的名稱。或者,如果使用 fullInfo =
TRUE
調用 extends
,則返回值是一個命名列表,其名稱是前一個字符向量。與超類相對應的列表的元素是類 SClassExtension
的對象。在這些對象中的信息中,有一項可能有用:類之間的代數,由 "distance"
槽給出。
使用 extends
調用的結果進行編程,特別是使用 sapply
,可以選擇超類。編程技術是定義一個測試函數,該函數為遵守某些要求的超類或關係返回TRUE
。例如,要僅查找 next-to-direct 超類,請將此函數與擴展對象列表一起使用:
function(what) is(what, "SClassExtension") && what@distance == 2
或者,要僅查找 "myPkg"
中的超類,請將此函數與簡單的名稱向量結合使用:
function(what) getClassDef(what)@package == "myPkg"
將此類函數作為參數提供給在 extends
的輸出上調用的 sapply
,可以讓您找到具有所需屬性的超類。請參閱下麵的示例。
請注意,使用擴展對象的函數必須測試其參數的類,因為不幸的是,為此目的, extends
返回的列表包括 class1
本身,作為對象 TRUE
。
注意
之前R4.2.0 代碼使用了第一個元素class1
和class2
,默默地,現在要求這些是長度為一的字符向量。
例子
## Not run:
## this example can be run if package XRPython from CRAN is installed.
supers <- extends("PythonInterface")
## find all the superclasses from package XR
fromXR <- sapply(supers,
function(what) getClassDef(what)@package == "XR")
## print them
supers[fromXR]
## find all the superclasses at distance 2
superRelations <- extends("PythonInterface", fullInfo = TRUE)
dist2 <- sapply(superRelations,
function(what) is(what, "SClassExtension") && what@distance == 2)
## print them
names(superRelations)[dist2]
## End(Not run)
參考
Chambers, John M. (2016) Extending R, Chapman & Hall. (Chapters 9 and 10.)
也可以看看
雖然 inherits
是為 S3 類定義的,但它已被修改,以便返回的結果幾乎總是等於 is
,無論是對於 S4 還是非 S4 對象。由於它是用C實現的,所以速度要快一些。唯一的不等價性是由於使用 setIs
引起的,這種情況很少會遇到。
相關用法
- R isSealedMethod 檢查密封方法或類
- R implicitGeneric 管理通用函數的隱式版本
- R inheritedSlotNames 從超級類繼承的插槽名稱
- R as 強製對象屬於某個類
- R language-class 表示未評估語言對象的類
- R className 類名包含對應的包
- R BasicClasses 基本數據類型對應的類
- R callGeneric 從方法調用當前通用函數
- R findClass 查找類定義
- R setOldClass 注冊舊式 (S3) 類和繼承
- R ReferenceClasses 具有按引用處理的字段的對象(OOP 樣式)
- R MethodsList 方法列表對象
- R setGroupGeneric 創建函數的組通用版本
- R StructureClasses 基本結構對應的類
- R showMethods 顯示指定函數或類的所有方法
- R getMethod 獲取或測試方法的定義
- R slot 正式類對象中的槽
- R S4groupGeneric S4組通用函數
- R methodUtilities 用於方法和 S-Plus 兼容性的實用函數
- R getClass 獲取類定義
- R evalSource 使用源文件中的函數定義,無需重新安裝包
- R cbind2 按列或行組合兩個對象
- R GenericFunctions 管理通用函數的工具
- R dotsMethods 在方法簽名中使用...
- R S3Part 包含 S3 類的 S4 類
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Is an Object from a Class?。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。