StructureClasses           package:methods           R Documentation

_C_l_a_s_s_e_s _C_o_r_r_e_s_p_o_n_d_i_n_g _t_o _B_a_s_i_c _S_t_r_u_c_t_u_r_e_s

_D_e_s_c_r_i_p_t_i_o_n:

     The virtual class 'structure' and classes that extend it are
     formal classes analogous to S language structures such as arrays
     and time-series.

_U_s_a_g_e:

     ## 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

_O_b_j_e_c_t_s _f_r_o_m _t_h_e _C_l_a_s_s_e_s:

     Objects can be created by calls of the form 'new(Class, ...)',
     where 'Class' is the quoted name of the specific class (e.g.,
     '"matrix"'), and the other arguments, if any, are interpreted as
     arguments to the corresponding function, e.g., to function
     'matrix()'.  There is no particular advantage over calling those
     functions directly, unless you are writing software designed to
     work for multiple classes, perhaps with the class name and the
     arguments passed in.

     Objects created from the classes '"matrix"' and '"array"' are
     unusual, to put it mildly, and have been for some time.  Although
     they may appear to be objects from these classes, they do not have
     the internal structure of either an S3 or S4 class object.  In
     particular, they have no '"class"' attribute and are not
     recognized as objects with classes (that is, both 'is.object' and
     'isS4' will return 'FALSE' for such objects).

     That the objects still behave as if they came from the
     corresponding class (most of the time, anyway) results from
     special code recognizing 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 these two classes_may_ be used as the data part
     of an S4 class; for example, you can get away with 'contains =
     "matrix"' in a call to 'setGeneric' to create an S4 class that is
     a subclass of '"matrix"'.  There is no guarantee that everything
     will work perfectly, but a number of classes have been written in
     this form successfully.

     The class '"ts"'  is basically an S3 class that has been
     registered with S4, using the 'setOldClass' mechanism.  Versions
     of R through 2.7.0 treated this class as a pure S4 class, which
     was in principal a good idea, but in practice did not allow
     subclasses to be defined and had other intrinsic problems.  (For
     example, setting the '"tsp"' parameters as a slot often fails
     because the built-in implementation does not allow the slot to be
     temporarily inconsistent with the length of the data. Also, the S4
     class prevented the correct specification of the S3 inheritance
     for class '"mts"'.)

     The current behavior (beginning with version 2.8.0 of R) registers
     '"ts"' as an S3 class,  using an S4-style definition (see the
     documentation for 'setOldClass' in the examples section for an
     abbreviated listing of how this is done.  The S3 inheritance of
     '"mts"' in package 'stats' is also registered. These classes, as
     well as '"matrix"' and '"array"' should be valid in most examples
     as superclasses for new S4 class definitions.

_E_x_t_e_n_d_s:

     The specific classes all extend class '"structure"', directly, and
     class '"vector"', by class '"structure"'.

_M_e_t_h_o_d_s:


     _c_o_e_r_c_e Methods are defined to coerce arbitrary objects to these
          classes, by calling the corresponding basic function, for
          example, 'as(x, "matrix")' calls 'as.matrix(x)'. If 'strict =
          TRUE' in the call to 'as()', the method goes on to delete all
          other slots and attributes other than the 'dim' and
          'dimnames'.

     _O_p_s Group methods (see, e.g., 'S4groupGeneric') are defined for
          combinations of structures and vectors (including special
          cases for array and matrix), implementing the concept of
          vector structures as in the reference.  Essentially,
          structures combined with vectors retain the structure as long
          as the resulting object has the same length.  Structures
          combined with other structures remove the structure, since
          there is no automatic way to determine what should happen to
          the slots defining the structure.

          Note that these methods will be activated when a package is
          loaded containing a class that inherits from any of the
          structure classes or class '"vector"'.


_R_e_f_e_r_e_n_c_e_s:

     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).

_S_e_e _A_l_s_o:

     Class nonStructure, which enforces the alternative model, in which
     all slots are dropped if any math transformation or operation is
     applied to an object from a class extending one of the basic
     classes.

_E_x_a_m_p_l_e_s:

     showClass("structure")

     ## explore a bit :
     showClass("ts")
     (ts0 <- new("ts"))
     str(ts0)

     showMethods("Ops") # six methods from these classes, but maybe many more

