\Header{assign}{Assign a Value to a Name}
\alias{$\leftarrow $}{assign}
\alias{$<\leftarrow $}{assign}
\alias{$\rightarrow $}{assign}
\alias{$\rightarrow >$}{assign}
\keyword{data}{assign}
\begin{Usage}
\begin{verbatim}
assign(x, value, pos = -1, envir = sys.frame(sys.parent()),
       inherits = FALSE, immediate = TRUE)
x <- value
x <<- value
value -> x
value ->> x
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\texttt{x}] a variable name (given as a quoted string).
\item[\texttt{value}] a value to be assigned to \texttt{x}.
\item[\texttt{pos}] an index into the search list which determines which
environment the assignment is to take place in. A character string may
also be used. The environment
can also be specified directly with \texttt{envir}.
\item[\texttt{envir}] the \texttt{\Link{environment}} in which to assign.  The
default is the environment where the call to \texttt{assign} takes place.
\item[\texttt{inherits}] should the enclosing frames of the environment be
inspected?
\item[\texttt{immediate}] an ignored compatibility feature.
\end{ldescription}
\end{Arguments}
\begin{Value}
This function is invoked for its side effect, which is assigning
\texttt{value} to the variable \texttt{x}.  If no \texttt{envir} is
specified, then the assignment takes place in the currently active
environment.

If \texttt{inherits} is \texttt{TRUE}, parents of the supplied
environment are searched until the variable \texttt{x} is encountered.
The value is then assigned in the environment in which the variable is
encountered.  If the symbol is not encountered then assignment takes
place in the global environment.

If \texttt{inherits} is \texttt{FALSE}, assignment takes place in the
initial frame of \texttt{envir}.

The arrow forms of assignment provide shortcut ways to carry out
assignment.  The \texttt{<-} and \texttt{->} forms carry out assignment
in the local environment frame, while the \texttt{<<-} and \texttt{->>}
forms cause a search to made through the environment for an existing
definition of the variable being assigned.  If such a variable is
found then its value is redefined, otherwise assignment takes place
globally.

Note that the action of \texttt{<<-} and \texttt{->>} differs from
that in the S language, but is useful in conjunction with the
scoping rules of R.\end{Value}
\begin{SeeAlso}
\texttt{\Link{get}}, \texttt{\Link{environment}}.\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
for(i in 1:6) { #-- Create objects  'r1', 'r2', ... 'r6' --
 nam <- paste("r",i, sep=".")
 assign(nam, 1:i)
}
ls(pat="^r..$")

##-- Global assignment within a function:
myf <- function(x) {
 innerf <- function(x) assign("Global.res", x^2, env = .GlobalEnv)
 innerf(x+1)
}
myf(3)
Global.res # 16
\end{ExampleCode}
\end{Examples}

