Rev 81670 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/function.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2021 R Core Team% Distributed under GPL 2 or later\name{function}\alias{function}\alias{return}\alias{closure}\title{Function Definition}\usage{\special{function( arglist ) expr}\special{\\( arglist ) expr}\special{return(value)}}\description{These functions provide the base mechanisms for definingnew functions in the \R language.}\arguments{\item{arglist}{Empty or one or more name or name=expression terms.}\item{expr}{An expression.}\item{value}{An expression.}}\details{The names in an argument list can be back-quoted non-standard names(see \sQuote{\link{backquote}}).If \code{value} is missing, \code{NULL} is returned. If it is asingle expression, the value of the evaluated expression is returned.(The expression is evaluated as soon as \code{return} is called, inthe evaluation frame of the function and before any\code{\link{on.exit}} expression is evaluated.)If the end of a function is reached without calling \code{return}, thevalue of the last evaluated expression is returned.The shorthand form \code{\\(x) x + 1} is parsed as \code{function(x) x+ 1}. It may be helpful in making code containing simple functionexpressions more readable.}\section{Technical details}{This type of function is not the only type in \R: they are called\emph{closures} (a name with origins in LISP) to distinguish them from\link{primitive} functions.A closure has three components, its \code{\link{formals}} (its argumentlist), its \code{\link{body}} (\code{expr} in the \sQuote{Usage}section) and its \code{\link{environment}} which provides theenclosure of the evaluation frame when the closure is used.There is an optional further component if the closure has beenbyte-compiled. This is not normally user-visible, but is indicatedwhen functions are printed.}\seealso{\code{\link{args}}.\code{\link{formals}}, \code{\link{body}} and\code{\link{environment}} for accessing the component parts of afunction.\code{\link{debug}} for debugging; using \code{\link{invisible}} inside\code{return(.)} for returning \emph{invisibly}.}\references{Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth & Brooks/Cole.}\examples{norm <- function(x) sqrt(x\%*\%x)norm(1:4)## An anonymous function:(function(x, y){ z <- x^2 + y^2; x+y+z })(0:7, 1)}\keyword{programming}