当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R StructureClasses 基本结构对应的类


R语言 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.objectisS4 都将为此类对象返回 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 方法,它们尽可能接受与基本生成器函数 matrixarrayts 相同的参数。限制是具有多个非虚拟超类的类必须在调用 new 时接受来自该超类的对象;因此,这样的类(在某些语言中称为 “mixin”)使用 initialize 的默认方法,没有特殊参数。

扩展

具体类都直接扩展类 "structure" ,并通过类 "structure" 扩展类 "vector"

方法

强制

定义方法来通过调用相应的基本函数将任意对象强制到这些类,例如 as(x, "matrix") 调用 as.matrix(x) 。如果 strict = TRUE 位于对 as() 的调用中,则该方法将继续删除除 dimdimnames 之外的所有其他槽和属性。

行动

组方法(例如,参见 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-devel大神的英文原创作品 Classes Corresponding to Basic Structures。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。