From h.wickham at gmail.com  Wed Jul 24 16:35:17 2013
From: h.wickham at gmail.com (Hadley Wickham)
Date: Wed, 24 Jul 2013 09:35:17 -0500
Subject: [Rd] Understanding modification in place
Message-ID: <CABdHhvGCcVdGFPwEW9yxG8UBQJXj2x+rEFEgTTkBcqLSs_M6=Q@mail.gmail.com>

Hi all,

Take this simple script, which I'm trying to use to understand when
modification in-place occurs, and when a new object is created:

message("Global")
x <- 1:3
.Internal(inspect(x))
x[2] <- 1L
.Internal(inspect(x))

message("In function")
(function() {
  x <- 1:3
  .Internal(inspect(x))
  x[2] <- 1L
  .Internal(inspect(x))
})()

If I run it from the command line, I get:

Global
@1050bb840 13 INTSXP g0c2 [MARK,NAM(1)] (len=3, tl=0) 1,2,3
@1050bb840 13 INTSXP g0c2 [MARK,NAM(1)] (len=3, tl=0) 1,1,3
In function
@1050bb190 13 INTSXP g0c2 [NAM(1)] (len=3, tl=0) 1,2,3
@1050bb190 13 INTSXP g0c2 [NAM(1)] (len=3, tl=0) 1,1,3

i.e. both modifications occur in place.

If I put it in a file and source() it, I get:

Global
@1050bb318 13 INTSXP g0c2 [NAM(2)] (len=3, tl=0) 1,2,3
@1050bb698 13 INTSXP g0c2 [NAM(1)] (len=3, tl=0) 1,1,3
In function
@1050b8958 13 INTSXP g0c2 [NAM(1)] (len=3, tl=0) 1,2,3
@1050b8958 13 INTSXP g0c2 [NAM(1)] (len=3, tl=0) 1,1,3

i.e. in the global environment a copy is created.

Why is there a difference?

Thanks!

Hadley

-- 
Chief Scientist, RStudio
http://had.co.nz/



[Rd] Understanding modification in place
Hadley Wickham