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 i
th 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.
Get R in a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.