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.
### 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
If a class is not virtual (see section in Classes_Details
),
objects can be created by calls of the form new(Class, ...)
,
where 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 "expression"
is slightly odd, in that the …
arguments will not be evaluated; therefore, don't enclose them
in a call to quote()
.
Note that class "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 NULL
or a character vector of
the same length as the vector. If you want to guarantee that list
names are preserved, use class "namedList"
, rather than
"list"
. Objects from this class must have a names attribute,
corresponding to slot "names"
,
of type "character"
. Internally, R treats names for
lists specially, which makes it impractical to have the corresponding slot in
class "namedList"
be a union of character names and NULL
.
The basic classes include classes for the basic R types. Note that
objects of these types will not usually be S4 objects
(isS4
will return FALSE
), although objects from
classes that contain the basic class will be S4 objects, still with
the same type. The type as
returned by typeof
will sometimes differ from the class,
either just from a choice of terminology (type "symbol"
and
class "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 "language"
have type "language"
, for example).
The vector classes extend "vector"
, directly.
Methods are defined to coerce arbitrary objects to
the vector classes, by calling the corresponding basic function, for
example, as(x, "numeric")
calls as.numeric(x)
.