blob: 1f7051dc090113361e4e55883bc4f95eff6f7cfc [file] [log] [blame]
% File src/library/utils/man/removeSource.Rd
% Part of the R package, https://www.R-project.org
% Copyright 2014-2018 R Core Team
% Distributed under GPL 2 or later
\name{removeSource}
\alias{removeSource}
\title{Remove Stored Source from a Function or Language Object}
\description{
When \code{options("keep.source")} is \code{TRUE}, a copy of the
original source code to a function is stored with it. Similarly,
\code{\link{parse}()} may keep formatted source for an expression.
Such source reference attributes are removed from the object by
\code{removeSource()}.
}
\usage{
removeSource(fn)
}
\arguments{
\item{fn}{a \code{\link{function}} or another language object
(fulfilling \code{\link{is.language}}) from which to remove the
source.
}
}
\details{
This removes the \code{"srcref"} and related attributes, via
\emph{recursive} cleaning of \code{body(fn)} in the case of a function
or the recursive language parts, otherwise.
}
\value{
A copy of the \code{fn} object with the source removed.
}
\seealso{
\code{\link{is.language}} about language objects.
\code{\link{srcref}} for a description of source reference records,
\code{\link{deparse}} for a description of how functions are deparsed.
}
\examples{
## to make this act independently of the global 'options()' setting:
op <- options(keep.source = TRUE)
fn <- function(x) {
x + 1 # A comment, kept as part of the source
}
fn
names(attributes(fn)) # "srcref" (only)
names(attributes(body(fn))) # "srcref" "srcfile" "wholeSrcref"
f2 <- removeSource(fn)
f2
stopifnot(length(attributes(fn)) > 0,
is.null(attributes(f2)),
is.null(attributes(body(f2))))
## Source attribute of parse()d expressions,
## have {"srcref", "srcfile", "wholeSrcref"} :
E <- parse(text ="a <- x^y # power") ; names(attributes(E ))
E. <- removeSource(E) ; names(attributes(E.))
stopifnot(length(attributes(E )) > 0,
is.null(attributes(E.)))
options(op) # reset to previous state
}
\keyword{utility}