Objects Are Copied in Assignment Statements
In assignment statements, most objects are immutable. R will copy the object, not just the reference to the object. For example:
> u <- list(1) > v <- u > u[[1]] <- "hat" > u [[1]] [1] "hat" > v [[1]] [1] 1
This applies to vectors, lists, and most other primitive objects in R.
This is also true in function calls. Consider the following
function, which takes two arguments: a vector x and an index i. The function sets the ith element of x to 4 and does nothing else:
> f <- function(x,i) {x[i] = 4}Suppose that we define a vector w and call f with x =
w and i = 1:
> w <- c(10, 11, 12, 13) > f(w,1)
The vector w is copied when
it is passed to the function, so it is not modified by the
function:
> w [1] 10 11 12 13
The value x is modified
inside the context of the function. Technically, the R interpreter
copies the object assigned to w and
then assigns the symbol x to point
at the copy. We will talk about how you can actually create mutable
objects, or pass references to objects, when we talk about
environments.
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