Chapter 28 Environment

By using Environment class, you can keep the environment you want to access as a variable and retrieve variables and functions from the environment.

28.1 Creating Environment object

This section shows you how to create an object of the Environment class.

Environment env();                           // Global environment
Environment env = Environment::global_env(); // Global environment
Environment env("package:stats");            // Environment of package "stats"
Environment env(1); // The i-th environment in onbject search path (i = 1 is global environment)

To check the object search path, use search() function in R.

> search()
 [1] ".GlobalEnv"        "tools:RGUI"        "package:stats"    
 [4] "package:graphics"  "package:grDevices" "package:utils"    
 [7] "package:datasets"  "package:methods"   "Autoloads"        
[10] "package:base"   

28.2 Accessing object in a environment

You can use the [] operator or get() member function to access variables and functions in an environment through Environment class object. If you access variables or functions that do not exist in that environment, R_NilValue (NULL) will be returned.

// Retrieving the global environment
Environment env = Environment::global_env();

// Retrieving object "x" from the global environment
NumericVector x = env["x"];

// Changing the value of the variable x in the global environment
x[0] = 100;

28.3 Creating new environment

A new empty environment can be created by using the function new_env() function.

28.3.1 new_env(size = 29)

Returns a new environment. The argument size specifies the initial size of the hash table of the environment to be created.

28.3.2 new_env(parent, size = 29)

Returns a new environment whose parent environmnet is the parent. The argument size specifies the initial size of the hash table of the environment to be created.

28.4 Member functions

28.4.1 get(name)

Retrieves the object with its name specified by the argument name. If it can not be found, it returns R_NilValue.

28.4.2 ls(all)

Returns a list of objects in this environment as a CharacterVector. If the argument all is true, all objects are displayed, false excludes objects whose name begins with ..

28.4.3 find(name)

Retrieves the object with the name specified by the argument name from this environment or its parent environment. If the object is not found, the binding_not_found exception is thrown.

28.4.4 exists(name)

Returns true if there is an object with the name specified by the argument name in this environment.

28.4.5 assign( name, x )

Assign the value x to the object with the name specified by the character string name in this environment. Returns true if it succeeds.

28.4.6 isLocked()

Returns true if this environment is locked.

28.4.7 remove(name)

Removes the object with the name specified by the string name from this environment. Returns true if it succeeds.

28.4.8 lock(bindings = false)

Locks this environment. If binding = true, it also locks bindings of this environment. (The “binding” is linking between name of the object and data of the object in R.)

28.4.9 lockBinding(name)

Lock the binding (i.e. variable) specified by the string name in this environment.

28.4.10 unlockBinding(name){

Unlock the binding (i.e. variable) specified by the string name in this environment.

28.4.11 bindingIsLocked(name)

Returns true if the binding (i.e. variable) specified by the string name in this environment is locked.

28.4.12 bindingIsActive(name)

Returns true if the binding (i.e. variable) specified by the string name in this environment is active.

28.4.13 is_user_database()

Returns true if this environment inherits “UserDefinedDatabase”.

28.4.14 parent()

Returns the parent environment of this environment.

28.4.15 new_child(hashed)

Creates a new environment whose parent is this environment. If hashed == true, the created environment uses hash table.

28.5 Static member functions

###Environment::global_env()

Returns the global environment.

###Environment::empty_env()

Returns the empty environment.

###Environment::base_env()

Returns the environment of base package.

###Environment::base_namespace()

Returns the namespace of base package.

28.5.1 Environment::Rcpp_namespace()

Returns the namespace of Rcpp package.

28.5.2 Environment::namespace_env(package)

Returns the namespace of the package whose name is specified by argument package. If you use Environment::namespace_env(), you can call package functions without preloading the package with the library() function in R. This is equivalent to calling package function with the form PACKAGE::FUNCTION(). In addition, you can also access functions that are not exported in the package. This is equivalent to calling with the form PACKAGE:::FUNCTION() in R.