StructureClasses
位于 methods
包(package)。 说明
虚拟类structure
及其扩展类是类似于S语言结构(例如数组和时间序列)的正式类。
用法
## The following class names can appear in method signatures,
## as the class in as() and is() expressions, and, except for
## the classes commented as VIRTUAL, in calls to new()
"matrix"
"array"
"ts"
"structure" ## VIRTUAL
类中的对象
可以通过 new(Class, ...)
形式的调用来创建对象,其中 Class
是特定类的带引号的名称(例如 "matrix"
),其他参数(如果有)将被解释为相应函数的参数,例如,函数 matrix()
。与直接调用这些函数相比,没有什么特别的优势,除非您正在编写设计用于多个类的软件,可能需要传入类名和参数。
温和地说,从"matrix"
和"array"
类创建的对象很不寻常,而且这种情况已经有一段时间了。尽管它们可能看起来是这些类的对象,但它们不具有 S3 或 S4 类对象的内部结构。特别是,它们没有 "class"
属性,并且不会被识别为具有类的对象(即,is.object
和 isS4
都将为此类对象返回 FALSE
)。但是,可以为这些伪类定义方法(S4 和 S3),并且新类(S4 和 S3)可以从它们继承。
这些对象的行为仍然像来自相应的类(无论如何,大多数时候)是由于识别这些对象的特殊代码被构建到的基本代码中R。幸运的是,对于大多数目的来说,以通常的方式对待课程是有效的。特殊待遇的后果之一是这两类人可能用作 S4 类的数据部分;例如,你可以逃脱contains = "matrix"
在调用中setGeneric
创建一个 S4 类,它是"matrix"
。虽然不能保证一切都会完美运行,但已经成功地以这种形式编写了许多类。
请注意,包含 "matrix"
或 "array"
的类将具有该类的 .Data
槽。这是 .Data
除了用作指示对象类型的 pseudo-class 之外的唯一用途。在这种情况下,对象的类型将是所包含的矩阵或数组的类型。有关一般讨论,请参阅Classes_Details
。
班上"ts"
本质上是一个已在 S4 中注册的 S3 类,使用setOldClass
机制。版本R到 2.7.0 都将此类视为纯 S4 类,这原则上是个好主意,但实际上不允许定义子类,并且存在其他固有问题。 (例如,设置"tsp"
将参数作为槽经常会失败,因为内置实现不允许槽暂时与数据的长度不一致。此外,S4 类阻止了类的 S3 继承的正确规范"mts"
.)
与矩阵和数组相比,时间序列对象具有有效的 S3 类 "ts"
,使用 S4 样式定义进行注册(有关如何完成此操作的简短列表,请参阅示例部分中的 setOldClass
文档)。包 stats
中的 "mts"
的 S3 继承也已注册。这些类以及 "matrix"
和 "array"
在大多数示例中作为新 S4 类定义的超类应该有效。
所有这些类都有 initialize
的特殊 S4 方法,它们尽可能接受与基本生成器函数 matrix
、 array
和 ts
相同的参数。限制是具有多个非虚拟超类的类必须在调用 new
时接受来自该超类的对象;因此,这样的类(在某些语言中称为 “mixin”)使用 initialize
的默认方法,没有特殊参数。
扩展
具体类都直接扩展类 "structure"
,并通过类 "structure"
扩展类 "vector"
。
方法
- 强制
-
定义方法来通过调用相应的基本函数将任意对象强制到这些类,例如
as(x, "matrix")
调用as.matrix(x)
。如果strict = TRUE
位于对as()
的调用中,则该方法将继续删除除dim
和dimnames
之外的所有其他槽和属性。 - 行动
-
组方法(例如,参见
S4groupGeneric
)是针对结构和向量的组合(包括数组和矩阵的特殊情况)定义的,实现了参考文献中向量结构的概念。本质上,只要生成的对象具有相同的长度,结构与向量的组合就会保留结构。与其他结构组合的结构会删除该结构,因为没有自动方法来确定定义该结构的槽应该发生什么。请注意,当加载包含继承自任何结构类或类
"vector"
的类的包时,这些方法将被激活。
例子
showClass("structure")
## explore a bit :
showClass("ts")
(ts0 <- new("ts"))
str(ts0)
showMethods("Ops") # six methods from these classes, but maybe many more
参考
Chambers, John M. (2008) Software for Data Analysis: Programming with R Springer. (For the R version.)
Chambers, John M. (1998) Programming with Data Springer (For the original S4 version.)
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole (for the original vector structures).
也可以看看
类 nonStructure ,强制执行替代模型,其中如果将任何数学转换或运算应用于扩展基本类之一的类中的对象,则所有槽都会被删除。
相关用法
- R S4groupGeneric S4组通用函数
- R S3Part 包含 S3 类的 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 showMethods 显示指定函数或类的所有方法
- R getMethod 获取或测试方法的定义
- R slot 正式类对象中的槽
- R methodUtilities 用于方法和 S-Plus 兼容性的实用函数
- R getClass 获取类定义
- R evalSource 使用源文件中的函数定义,无需重新安装包
- R is 对象是来自类吗?
- R isSealedMethod 检查密封方法或类
- R cbind2 按列或行组合两个对象
- R GenericFunctions 管理通用函数的工具
- R dotsMethods 在方法签名中使用...
- R nonStructure-class 基本类型的非结构 S4 类
- R selectSuperClasses 类的超类(特定类型)
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Classes Corresponding to Basic Structures。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。