environment               package:base               R Documentation

Environment Access

Description:

     Get, set, test for and create environments.

Usage:

     environment(fun = NULL)
     environment(fun) <- value

     is.environment(x)

     .GlobalEnv
     globalenv()
     .BaseNamespaceEnv

     emptyenv()
     baseenv()

     new.env(hash = FALSE, parent = parent.frame(), size = 29L)

     parent.env(env)
     parent.env(env) <- value

     environmentName(env)

     env.profile(env)

Arguments:

     fun: a 'function', a 'formula', or 'NULL', which is the default.

   value: an environment to associate with the function

       x: an arbitrary R object.

    hash: a logical, if 'TRUE' the environment will be hashed

  parent: an environment to be used as the enclosure of the environment
          created.

     env: an environment

    size: an integer specifying the initial size for a hashed
          environment.  An internal default value will be used if
          'size' is 'NA' or zero.  This argument is ignored if 'hash'
          is 'FALSE'.

Details:

     Environments consist of a _frame_, or collection of named objects,
     and a pointer to an _enclosing environment_.  The most common
     example is the frame of variables local to a function call; its
     enclosure is the environment where the function was defined.  The
     enclosing environment is distinguished from the _parent frame_: 
     the latter (returned by 'parent.frame') refers to the environment
     of the caller of a function.

     When 'get' or 'exists' search an environment with the default
     'inherits = TRUE', they look for the variable in the frame, then
     in the enclosing frame, and so on.

     The global environment '.GlobalEnv', more often known as the
     user's workspace, is the first item on the search path.  It can
     also be accessed by 'globalenv()'.  On the search path, each
     item's enclosure is the next item.

     The object '.BaseNamespaceEnv' is the name space environment for
     the base package.  The environment of the base package itself is
     available as 'baseenv()'.  The ultimate enclosure of any
     environment is the empty environment 'emptyenv()', to which
     nothing may be assigned. If one follows the 'parent.env()' chain
     of enclosures back far enough from any environment, eventually one
     reaches the empty environment.

     The replacement function 'parent.env<-' is extremely dangerous as
     it can be used to destructively change environments in ways that
     violate assumptions made by the internal C code.  It may be
     removed in the near future.

Value:

     If 'fun' is a function or a formula then 'environment(fun)'
     returns the environment associated with that function or formula.
     If 'fun' is 'NULL' then the current evaluation environment is
     returned.

     The replacement form sets the environment of the function or
     formula 'fun' to the 'value' given.

     'is.environment(obj)' returns 'TRUE' if and only if 'obj' is an
     'environment'.

     'new.env' returns a new (empty) environment enclosed in the
     parent's environment, by default.

     'parent.env' returns the parent environment of its argument.

     'parent.env<-' sets the enclosing environment of its first
     argument.

     'environmentName' returns a character string, that given when the
     environment is printed or '""' if it is not a named environment.

     'env.profile' returns a list with the following components: 'size'
     the number of chains that can be stored in the hash table,
     'nchains' the number of non-empty chains in the table (as reported
     by HASHPRI), and 'counts' an integer vector giving the length of
     each chain (zero for empty chains).  This function is intended to
     assess the performance of hashed environments.  When 'env' is a
     non-hashed environment, 'NULL' is returned.

See Also:

     The 'envir' argument of 'eval', 'get', and 'exists'.

     'ls' may be used to view the objects in an environment, and hence
     'ls.str' may be useful for an overview.

     'sys.source' can be used to populate an environment.

Examples:

     f <- function() "top level function"

     ##-- all three give the same:
     environment()
     environment(f)
     .GlobalEnv

     ls(envir=environment(stats::approxfun(1:2,1:2, method="const")))

     is.environment(.GlobalEnv) # TRUE

     e1 <- new.env(parent = baseenv())  # this one has enclosure package:base.
     e2 <- new.env(parent = e1)
     assign("a", 3, envir=e1)
     ls(e1)
     ls(e2)
     exists("a", envir=e2)   # this succeeds by inheritance
     exists("a", envir=e2, inherits = FALSE)
     exists("+", envir=e2)   # this succeeds by inheritance

