Symbols
When you define a variable in R, you are actually assigning a symbol to a value in an environment. For example, when you enter the statement:
> x <- 1
on the R console, it assigns the symbol x to a vector object of length 1 with the
constant (double) value 1 in the global environment. When the R
interpreter evaluates an expression, it evaluates all symbols. If you
compose an object from a set of symbols, R will resolve the symbols at
the time that the object is constructed:
> x <- 1 > y <- 2 > z <- 3 > v <- c(x, y, z) > v [1] 1 2 3 > # v has already been defined, so changing x does not change v > x <- 10 > v [1] 1 2 3
It is possible to delay evaluation of an expression so that symbols are not evaluated immediately:
> x <- 1 > y <- 2 > z <- 3 > v <- quote(c(x,y,z)) > eval(v) [1] 1 2 3 > x <- 5 > eval(v) [1] 5 2 3
It is also possible to create a promise object in R to delay evaluation of a variable until it is (first) needed. You
can create a promise object through the delayedAssign function:
> x <- 1
> y <- 2
> z <- 3
> delayedAssign("v", c(x,y,z))
> x <- 5
> v
[1] 5 2 3Promise objects are used within packages to make objects available to users without loading them into memory. Unfortunately, it is not possible to determine if an object is a promise object, nor is it possible to figure out the environment in which it was created.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access