Rev 68017 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/exists.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2015 R Core Team% Distributed under GPL 2 or later\name{exists}\title{Is an Object Defined?}\alias{exists}\alias{get0}\description{Look for an \R object of the given name and possibly return it}\usage{exists(x, where = -1, envir = , frame, mode = "any",inherits = TRUE)get0(x, envir = pos.to.env(-1L), mode = "any", inherits = TRUE,ifnotfound = NULL)}\arguments{\item{x}{a variable name (given as a character string).}\item{where}{where to look for the object (see the details section); ifomitted, the function will search as if the name of the objectappeared unquoted in an expression.}\item{envir}{an alternative way to specify an environment to look in,but it is usually simpler to just use the \code{where} argument.}\item{frame}{a frame in the calling list. Equivalent to giving\code{where} as \code{sys.frame(frame)}.}\item{mode}{the mode or type of object sought: see the\sQuote{Details} section.}\item{inherits}{should the enclosing frames of the environment besearched?}\item{ifnotfound}{the return value of \code{get0(x, *)} when\code{x} does not exist.}}\details{The \code{where} argument can specify the environment in which to lookfor the object in any of several ways: as an integer (the position inthe \code{\link{search}} list); as the character string name of anelement in the search list; or as an \code{\link{environment}}(including using \code{\link{sys.frame}} to access the currently activefunction calls). The \code{envir} argument is an alternative way tospecify an environment, but is primarily there for back compatibility.This function looks to see if the name \code{x} has a value bound toit in the specified environment. If \code{inherits} is \code{TRUE} anda value is not found for \code{x} in the specified environment, theenclosing frames of the environment are searched until the name \code{x}is encountered. See \code{\link{environment}} and the \sQuote{RLanguage Definition} manual for details about the structure ofenvironments and their enclosures.\bold{Warning:}\code{inherits = TRUE} is the default behaviour for \R but not for S.If \code{mode} is specified then only objects of that type are sought.The \code{mode} may specify one of the collections \code{"numeric"} and\code{"function"} (see \code{\link{mode}}): any member of thecollection will suffice. (This is true even if a member of acollection is specified, so for example \code{mode = "special"} willseek any type of function.)}\note{With \code{get0()}, instead of the easy to read but somewhatinefficient \preformatted{if (exists(myVarName, envir = myEnvir)) {r <- get(myVarName, envir = myEnvir)## ... deal with r ...}}you now can use the more efficient (and slightly harder to read) \preformatted{if (!is.null(r <- get0(myVarName, envir = myEnvir))) {## ... deal with r ...}}}\value{\code{exists():} Logical, true if and only if an object of the correctname and mode is found.\code{get0():} The object---as from \code{\link{get}(x, *)}---if \code{exists(x, *)} is true, otherwise \code{ifnotfound}.}\references{Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth & Brooks/Cole.}\seealso{\code{\link{get}}. For quite a different kind of \dQuote{existence}checking, namely if function arguments were specified,\code{\link{missing}};and for yet a different kind, namely if a file exists,\code{\link{file.exists}}.}\examples{## Define a substitute function if necessary:if(!exists("some.fun", mode = "function"))some.fun <- function(x) { cat("some.fun(x)\n"); x }search()exists("ls", 2) # true even though ls is in pos = 3exists("ls", 2, inherits = FALSE) # false## These are true (in most circumstances):identical(ls, get0("ls"))identical(NULL, get0(".foo.bar.")) # default ifnotfound = NULL (!)\dontshow{stopifnot(identical(ls, get0("ls")),is.null(get0(".foo.bar.")))}}\keyword{data}