[Rd] Understanding modification in place
Hadley Wickham
h.wickham at gmail.com
Wed Jul 24 16:35:17 CEST 2013
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/
More information about the R-devel
mailing list