\HeaderA{deparse}{Expression Deparsing}{deparse}
\keyword{programming}{deparse}
\keyword{manip}{deparse}
\keyword{data}{deparse}
\begin{Description}\relax
Turn unevaluated expressions into character strings.
\end{Description}
\begin{Usage}
\begin{verbatim}
deparse(expr, width.cutoff = 60,
        backtick = mode(expr) %in% c("call", "expression", "(", "function"),
        control = c("keepInteger", "showAttributes", "keepNA"),
        nlines = -1)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{expr}] any \R{} expression.
\item[\code{width.cutoff}] integer in \eqn{[20, 500]}{} determining the cutoff
at which line-breaking is tried.
\item[\code{backtick}] logical indicating whether symbolic names should be
enclosed in backticks if they do not follow the standard syntax.
\item[\code{control}] character vector of deparsing options.  See
\code{\LinkA{.deparseOpts}{.deparseOpts}}.
\item[\code{nlines}] the maximum number of lines to produce.  Negative values
indicate no limit.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
This function turns unevaluated expressions (where \sQuote{expression}
is taken in a wider sense than the strict concept of a vector of mode
\code{"expression"} used in \code{\LinkA{expression}{expression}}) into character
strings (a kind of inverse to \code{\LinkA{parse}{parse}}).

A typical use of this is to create informative labels for data sets
and plots.  The example shows a simple use of this facility.  It uses
the functions \code{deparse} and \code{substitute} to create labels
for a plot which are character string versions of the actual arguments
to the function \code{myplot}.

The default for the \code{backtick} option is not to quote single
symbols but only composite expressions.  This is a compromise to
avoid breaking existing code.

Using \code{control = "all"} comes closest to making \code{deparse()}
an inverse of \code{parse()}.  However, not all objects are
deparse-able even with this option and a warning will be issued if the
function recognizes that it is being asked to do the impossible.

Numeric and complex vectors are converted using 15 significant digits:
see \code{\LinkA{as.character}{as.character}} for more details.

\code{width.cutoff} is a lower bound for the line lengths: deparsing a
line proceeds until at least \code{width.cutoff} \emph{bytes} have
been output and e.g. \code{arg = value} expressions will not be split
across lines.
\end{Details}
\begin{Note}\relax
To avoid the risk of a source attribute out of sync with the actual
function definition, the source attribute of a function will never 
be deparsed as an attribute.
\end{Note}
\begin{References}\relax
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)
\emph{The New S Language}.
Wadsworth \& Brooks/Cole.
\end{References}
\begin{SeeAlso}\relax
\code{\LinkA{substitute}{substitute}},
\code{\LinkA{parse}{parse}},
\code{\LinkA{expression}{expression}}.

\code{Quotes} for quoting conventions, including backticks.
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
require(stats); require(graphics)

deparse(args(lm))
deparse(args(lm), width = 500)
myplot <-
function(x, y) {
    plot(x, y, xlab=deparse(substitute(x)),
        ylab=deparse(substitute(y)))
}
e <- quote(`foo bar`)
deparse(e)
deparse(e, backtick=TRUE)
e <- quote(`foo bar`+1)
deparse(e)
deparse(e, control = "all")
\end{ExampleCode}
\end{Examples}

