Rev 72387 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/methods/man/StructureClasses.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2011 R Core Team% Distributed under GPL 2 or later\name{StructureClasses}\title{Classes Corresponding to Basic Structures}\docType{class}%\alias{structure-class}\alias{matrix-class}\alias{array-class}\alias{ts-class}% Group Methods of these\alias{Math,structure-method}\alias{Ops,structure,vector-method}\alias{Ops,structure,structure-method}\alias{Ops,structure,array-method}\alias{Ops,vector,structure-method}\alias{Ops,array,structure-method}\alias{Ops,array,array-method}\alias{initialize,array-method}\alias{initialize,matrix-method}\alias{initialize,ts-method}\alias{initialize,mts-method}\alias{show,ts-method}%\description{The virtual class \code{structure} and classes thatextend it are formal classes analogous to S language structures suchas arrays and time-series.}\usage{## 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}\section{Objects from the Classes}{Objects can be created by calls of the form \code{new(Class, ...)},where \code{Class} is the quoted name of the specific class (e.g.,\code{"matrix"}), and the other arguments, if any, are interpreted asarguments to the corresponding function, e.g., to function\code{matrix()}. There is no particular advantage over calling thosefunctions directly, unless you are writing software designed to workfor multiple classes, perhaps with the class name and the argumentspassed in.Objects created from the classes \code{"matrix"} and \code{"array"}are unusual, to put it mildly, and have been for some time. Althoughthey may appear to be objects from these classes, they do not have theinternal structure of either an S3 or S4 class object. In particular,they have no \code{"class"} attribute and are not recognized asobjects with classes (that is, both \code{\link{is.object}} and\code{\link{isS4}} will return \code{FALSE} for such objects).However, methods (both S4 and S3) can be defined for thesepseudo-classes and new classes (both S4 and S3) can inherit from them.That the objects still behave as if they came from the correspondingclass (most of the time, anyway) results from special coderecognizing such objects being built into the base code of \R.For most purposes, treating the classes in the usual way will work,fortunately. One consequence of the special treatment is that thesetwo classes\emph{may} be used as the data part of an S4 class; forexample, you can get away with \code{contains = "matrix"} in a callto \code{\link{setGeneric}} to create an S4 class that is a subclassof \code{"matrix"}. There is no guarantee that everything will workperfectly, but a number of classes have been written in this formsuccessfully.Note that a class containing \code{"matrix"} or \code{"array"} willhave a \code{.Data} slot with that class. This is the only use of\code{.Data} other than as a pseudo-class indicating the type of theobject. In this case the type of the object will be the type of thecontained matrix or array. See \code{\link{Classes_Details}} for a generaldiscussion.The class \code{"ts"} is basically an S3 classthat has been registered with S4, using the\code{\link{setOldClass}} mechanism. Versions of \R through 2.7.0treated this class as a pure S4 class, which was in principal a goodidea, but in practice did not allow subclasses to be defined and hadother intrinsic problems. (For example, setting the\code{"tsp"} parameters as a slot often fails because the built-inimplementation does not allow the slot to be temporarilyinconsistent with the length of the data. Also, the S4 classprevented the correct specification of the S3 inheritance for class\code{"mts"}.)Time-series objects, in contrast to matrices and arrays, have a validS3 class, \code{"ts"}, registered using an S4-style definition (see thedocumentation for \code{\link{setOldClass}} in the examples sectionfor an abbreviated listing of how this is done). The S3inheritance of \code{"mts"} in package \pkg{stats} is alsoregistered.These classes, as well as \code{"matrix"} and \code{"array"} shouldbe valid in most examples as superclasses for new S4 classdefinitions.All of these classes have special S4 methods for\code{\link{initialize}} that accept the same arguments as the basicgenerator functions, \code{\link{matrix}},\code{\link{array}}, and \code{\link{ts}}, in so far as possible.The limitation is that a class that has more than one non-virtualsuperclass must accept objects from that superclass in the call to\code{\link{new}}; therefore, a such a class (what is called a\dQuote{mixin} in some languages) uses the default method for\code{\link{initialize}}, with no special arguments.}\section{Extends}{The specific classes all extend class \code{"structure"}, directly, andclass \code{"vector"}, by class \code{"structure"}.}\section{Methods}{\describe{\item{coerce}{Methods are defined to coerce arbitrary objects tothese classes, by calling the corresponding basic function, forexample, \code{as(x, "matrix")} calls \code{as.matrix(x)}.If \code{strict = TRUE} in the call to \code{as()}, the methodgoes on to delete all other slots and attributes other than the\code{dim} and \code{dimnames}.}\item{Ops}{Group methods (see, e.g., \code{\link{S4groupGeneric}})are defined for combinations of structures and vectors (includingspecial cases for array and matrix), implementing the concept ofvector structures as in the reference. Essentially, structurescombined with vectors retain the structure as long as theresulting object has the same length. Structures combined withother structures remove the structure, since there is noautomatic way to determine what should happen to the slotsdefining the structure.Note that these methods will be activated when a package is loadedcontaining a class that inherits from any of the structureclasses or class \code{"vector"}.}}}\seealso{Class \linkS4class{nonStructure}, which enforces thealternative model, in which all slots are dropped if any mathtransformation or operation is applied to an object from a classextending one of the basic classes.}\references{Chambers, John M. (2008)\emph{Software for Data Analysis: Programming with R}Springer. (For the R version.)Chambers, John M. (1998)\emph{Programming with Data}Springer (For the original S4 version.)Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth & Brooks/Cole (for the original vector structures).}\examples{showClass("structure")## explore a bit :showClass("ts")(ts0 <- new("ts"))str(ts0)showMethods("Ops") # six methods from these classes, but maybe many more}\keyword{classes}