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
objects can be created by calls of the form
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.
"expression" is slightly odd, in that the …
arguments will not be evaluated; therefore, don't enclose them
in a call to
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
"character". Internally, R treats names for
lists specially, which makes it impractical to have the corresponding slot in
"namedList" be a union of character names and
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
typeof will sometimes differ from the class,
either just from a choice of terminology (type
"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
Methods are defined to coerce arbitrary objects to
the vector classes, by calling the corresponding basic function, for
as(x, "numeric") calls