R possesses a simple generic function mechanism which can be used for an object-oriented style of programming. Method dispatch takes place based on the class of the first argument to the generic function.
class(x)
class(x) <- value
unclass(x)
inherits(x, what, which = FALSE)oldClass(x)
oldClass(x) <- value
a R object
a character vector naming classes.  value
    can also be NULL.
logical affecting return value: see ‘Details’.
An additional mechanism of formal classes, nicknamed
  “S4”, is available in package methods which is attached
  by default.  For objects which have a formal class, its name is
  returned by class as a character vector of length one and
  method dispatch can happen on several arguments, instead of
  only the first.  However, S3 method selection attempts to treat objects
  from an S4 class as if they had the appropriate S3 class attribute, as
  does inherits.  Therefore, S3 methods can be defined for S4
  classes.  See the ‘Introduction’ and ‘Methods_for_S3’
  help pages for basic information on S4 methods and for the relation
  between these and S3 methods.
The replacement version of the function sets the class to the value
  provided.  For classes that have a formal definition, directly
  replacing the class this way is strongly deprecated.  The expression
  as(object, value) is the way to coerce an object to a
  particular class.
The analogue of inherits for formal classes is
  is.  The two functions behave consistently
  with one exception:  S4 classes can have conditional
  inheritance, with an explicit test.  In this case, is will
  test the condition, but inherits ignores all conditional
  superclasses.
Here, we describe the so called “S3” classes (and methods). For “S4” classes (and methods), see ‘Formal classes’ below.
  Many R objects have a class attribute, a character vector
  giving the names of the classes from which the object inherits.
  (Functions oldClass and oldClass<- get and set the
  attribute, which can also be done directly.)
  If the object does not have a class attribute, it has an implicit
  class, notably "matrix", "array", "function" or
  "numeric" or the result of
  typeof(x) (which is similar to mode(x)),
  but for type "language" and mode "call",
  where the following extra classes exist for the corresponding function
  calls:
  if, while, for, =, <-, (,
  {, call.
Note that NULL objects cannot have attributes (hence not
  classes) and attempting to assign a class is an error.
When a generic function fun is applied to an object with class
  attribute c("first", "second"), the system searches for a
  function called fun.first and, if it finds it, applies it to
  the object.  If no such function is found, a function called
  fun.second is tried.  If no class name produces a suitable
  function, the function fun.default is used (if it exists).  If
  there is no class attribute, the implicit class is tried, then the
  default method.
The function class prints the vector of names of classes an
  object inherits from.  Correspondingly, class<- sets the
  classes an object inherits from.  Assigning NULL removes the
  class attribute.
unclass returns (a copy of) its argument with its class
  attribute removed.  (It is not allowed for objects which cannot be
  copied, namely environments and external pointers.)
inherits indicates whether its first argument inherits from any
  of the classes specified in the what argument.  If which
  is TRUE then an integer vector of the same length as
  what is returned.  Each element indicates the position in the
  class(x) matched by the element of what; zero indicates
  no match. If which is FALSE then TRUE is
  returned by inherits if any of the names in what match
  with any class.
All but inherits are primitive functions.
# NOT RUN {
x <- 10
class(x) # "numeric"
oldClass(x) # NULL
inherits(x, "a") #FALSE
class(x) <- c("a", "b")
inherits(x,"a") #TRUE
inherits(x, "a", TRUE) # 1
inherits(x, c("a", "b", "c"), TRUE) # 1 2 0
class( quote(pi) )           # "name"
## regular calls
class( quote(sin(pi*x)) )    # "class"
## special calls
class( quote(x <- 1) )       # "<-"
class( quote((1 < 2)) )      # "("
class( quote( if(8<3) pi ) ) # "if"
# }
Run the code above in your browser using DataLab