% File src/library/methods/man/BasicClasses.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2007 R Core Team
% Distributed under GPL 2 or later

\name{BasicClasses}
\docType{class}
\alias{character-class}
\alias{complex-class}
\alias{double-class}
\alias{expression-class}
\alias{externalptr-class}
\alias{integer-class}
\alias{list-class}
\alias{logical-class}
\alias{numeric-class}
\alias{raw-class}
\alias{single-class}
\alias{vector-class}
\alias{NULL-class}
\alias{builtin-class}
\alias{special-class}
\alias{function-class}
\alias{ANY-class}
\alias{VIRTUAL-class}
\alias{missing-class}
\alias{S4-class}
\alias{namedList-class}
\title{Classes Corresponding to Basic Data Types }
\description{
  Formal classes exist corresponding to the basic R object types, allowing
  these types to be used in method signatures, as slots in class
  definitions, and to be extended by new classes.}
\usage{
### The following are all basic vector classes.
### They can appear as class names in method signatures,
### in calls to as(), is(), and new().
"character"
"complex"
"double"
"expression"
"integer"
"list"
"logical"
"numeric"
"single"
"raw"

### the class
"vector"
### is a virtual class, extended by all the above

### the class
"S4"
### is an object type for S4 objects that do not extend
### any of the basic vector classes.  It is a virtual class.

### The following are additional basic classes
"NULL"     #  NULL objects
"function" #  function objects, including primitives
"externalptr" # raw external pointers for use in C code

"ANY"  # virtual classes used by the methods package itself
"VIRTUAL"
"missing"

"namedList" # the alternative to "list" that preserves
            # the names attribute
}
\section{Objects from the Classes}{
  If a class is not virtual (see section in \code{\link{Classes_Details}}),
  objects can be created by calls of the form \code{new(Class, ...)},
  where \code{Class} is the quoted class name, and the remaining
  arguments if any are objects to be interpreted as vectors of this
  class.  Multiple arguments will be concatenated.

  The class \code{"expression"} is slightly odd, in that the \dots
  arguments will \emph{not} be evaluated; therefore, don't enclose them
  in a call to \code{quote()}.

  Note that class \code{"list"} is a pure vector.  Although lists with
  names go back to the earliest versions of S, they are an extension
  of the vector concept in that they have an attribute (which can now
  be a slot) and which is either \code{NULL} or a character vector of
  the same length as the vector.  If you want to guarantee that list
  names are preserved, use class \code{"namedList"}, rather than
  \code{"list"}.  Objects from this class must have a names attribute,
  corresponding to slot \code{"names"},
  of type \code{"character"}.  Internally, R treats names for
  lists  specially, which makes it impractical to have the corresponding slot in
  class \code{"namedList"} be a union of character names and \code{NULL}.

}

\section{Classes and Types}{
The basic classes include classes for the basic R types.  Note that
objects of these types will not usually be S4 objects
(\code{\link{isS4}} will return \code{FALSE}), although objects from
classes that contain the basic class will be S4 objects, still with
the same type.  The type as
returned by \code{\link{typeof}} will sometimes differ from the class,
either just from a choice of terminology (type \code{"symbol"} and
class \code{"name"}, for example) or because there is not a one-to-one
correspondence between class and type (most of the classes that
inherit from class \code{"language"} have type \code{"language"}, for example).
}


\section{Extends}{
  The vector classes extend \code{"vector"}, directly.
}
\section{Methods}{
  \describe{
    \item{coerce}{Methods are defined to coerce arbitrary objects to
      the vector classes, by calling the corresponding basic function, for
      example, \code{as(x, "numeric")} calls \code{as.numeric(x)}. }
  }
}
\keyword{classes}
