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?。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
