blob: 75211e487b348cbc0db71d4b51f4e670ac83d248 [file] [log] [blame]
% File src/library/base/man/zMethods.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2015 R Core Team
% Distributed under GPL 2 or later
\name{InternalMethods}
\alias{InternalMethods}
\alias{InternalGenerics}
\alias{internal generic}
\alias{.S3PrimitiveGenerics}
\title{Internal Generic Functions}
\description{
Many \R-internal functions are \emph{generic} and allow
methods to be written for.
}
% -------------------- grep -nw DispatchOrEval src/*/*[ch]
% --------------
\details{
The following primitive and internal functions are \emph{generic},
i.e., you can write \code{\link{methods}} for them:
\code{\link{[}},% % do_subset() [subset.c]
\code{\link{[[}},% % do_subset2() [subset.c]
\code{\link{$}},
\code{\link{[<-}},
\code{\link{[[<-}},
\code{\link{$<-}},
\code{\link{length}},% % do_length() [array.c]
\code{\link{length<-}},% % do_lengthgets() [builtin.c]
\code{\link{dimnames}},% % do_dimnames() [attrib.c]
\code{\link{dimnames<-}},% % do_dimnamesgets() [attrib.c]
\code{\link{dim}},% % do_dim() [attrib.c]
\code{\link{dim<-}},% % do_dimgets() [attrib.c]
\code{\link{names}},% % do_names() [attrib.c]
\code{\link{names<-}},% % do_namesgets() [attrib.c]
\code{\link{levels<-}},% % do_levelsgets() [attrib.c]
\code{\link{c}},% % do_c() [bind.c]
\code{\link{unlist}},% % do_unlist() [bind.c]
\code{\link{cbind}},% not via DispatchOrEval [bind.c]
\code{\link{rbind}},
\code{\link{as.character}},
\code{\link{as.complex}},
\code{\link{as.double}},
\code{\link{as.integer}},
\code{\link{as.logical}},
\code{\link{as.raw}},
\code{\link{as.vector}},% % do_asvector() [coerce.c]
\code{\link{is.array}},
\code{\link{is.matrix}},
\code{\link{is.na}},% % do_isna() [coerce.c]
\code{\link{is.nan}},% % do_isnan() [coerce.c]
\code{\link{is.numeric}},
\code{\link{rep}},% [seq.c]
\code{\link{seq.int}}
(which dispatches methods for \code{"seq"})% [seq.c]
and \code{\link{xtfrm}}% [sort.c]
In addition, \code{is.name} is a synonym for \code{\link{is.symbol}} and
dispatches methods for the latter. Similarly, \code{\link{as.numeric}}
is a synonym for \code{as.double} and dispatches methods for the
latter, i.e., S3 methods are for \code{as.double}, whereas S4 methods
are to be written for \code{as.numeric}.
Note that all of the \link{group generic} functions are also
internal/primitive and allow methods to be written for them.
\code{.S3PrimitiveGenerics} is a character vector listing the
primitives which are internal generic and not \link{group generic}.
Currently \code{\link{as.vector}}, \code{\link{cbind}},
\code{\link{rbind}} and \code{\link{unlist}} are the internal
non-primitive functions which are internally generic.
For efficiency, internal dispatch only occurs on \emph{objects}, that
is those for which \code{\link{is.object}} returns true.
}
\seealso{
\code{\link{methods}} for the methods which are available.
}
\keyword{methods}