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/ ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel