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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。