new
位於 methods
包(package)。 說明
對 new
的調用返回第一個參數標識的類中新分配的對象。此調用依次調用與指定類對應的泛型函數 initialize
的方法,並將 ...
參數傳遞給該方法。在 initialize()
的默認方法中,命名參數為相應的槽提供值,未命名參數必須是來自此類的超類的對象。
對類的生成函數的調用(請參閱 setClass
)會將其 ... 參數傳遞給對 new()
的相應調用。
用法
new(Class, ...)
initialize(.Object, ...)
參數
Class |
類的名稱、 |
... |
用於指定新對象屬性的參數,傳遞給 |
.Object |
對象:請參閱“Initialize Methods”部分。 |
初始化方法
不直接調用通用函數initialize
。對new
的調用首先從類定義中複製原型對象,然後使用該對象作為第一個參數調用intialize()
,後跟...參數。
通過為 "initialize"
定義適當的方法,對生成器函數或 new()
調用中的 ...
參數的解釋可以專門針對特定類。
在默認方法中,...
中的未命名參數被解釋為來自超類的對象,命名參數被解釋為要分配到相應命名槽中的對象。顯式指定的槽會覆蓋同一槽的繼承信息,無論參數出現的順序如何。
initialize
方法不必將 ...
作為第二個參數(請參閱示例)。當說明新對象的自然參數不是槽的名稱時,通常會編寫初始化方法。如果您確實定義了這樣的方法,則應包含 ...
作為形式參數,並且您的方法應通過 callNextMethod
傳遞此類參數。這有助於定義您的類的未來子類。如果它們有額外的槽,並且您的方法沒有此參數,則這些槽將很難包含在初始化調用中。
有關某些類與現有方法的討論,請參閱initialize-methods
。
initialize
的方法隻能通過簡單繼承來繼承,因為要求該方法從目標類返回一個對象。有關一般概念,請參閱 setGeneric
的 simpleInheritanceOnly
參數以及 setIs
中的討論。
請注意,基本向量類 "numeric"
等是隱式定義的,因此可以對這些類使用 new
。 ... 參數被解釋為這種類型的對象,並連接到結果向量中。
例子
## using the definition of class "track" from \link{setClass}
## a new object with two slots specified
t1 <- new("track", x = seq_along(ydata), y = ydata)
# a new object including an object from a superclass, plus a slot
t2 <- new("trackCurve", t1, smooth = ysmooth)
### define a method for initialize, to ensure that new objects have
### equal-length x and y slots. In this version, the slots must still be
### supplied by name.
setMethod("initialize", "track",
function(.Object, ...) {
.Object <- callNextMethod()
if(length(.Object@x) != length(.Object@y))
stop("specified x and y of different lengths")
.Object
})
### An alternative version that allows x and y to be supplied
### unnamed. A still more friendly version would make the default x
### a vector of the same length as y, and vice versa.
setMethod("initialize", "track",
function(.Object, x = numeric(0), y = numeric(0), ...) {
.Object <- callNextMethod(.Object, ...)
if(length(x) != length(y))
stop("specified x and y of different lengths")
.Object@x <- x
.Object@y <- y
.Object
})
參考
Chambers, John M. (2016) Extending R, Chapman & Hall. (Chapters 9 and 10.)
也可以看看
Classes_Details 了解類定義的詳細信息,setOldClass
了解與 S3 類的關係。
相關用法
- R nonStructure-class 基本類型的非結構 S4 類
- 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 is 對象是來自類嗎?
- R isSealedMethod 檢查密封方法或類
- R cbind2 按列或行組合兩個對象
- R GenericFunctions 管理通用函數的工具
- R dotsMethods 在方法簽名中使用...
- R S3Part 包含 S3 類的 S4 類
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Generate an Object from a Class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。