Here's another approach using the sampling profiler: prof <- function() { Rprof(memory.profiling=T, interval=0.001) replicate(100, f()) Rprof(NULL) summaryRprof(memory = "stats") }
f <- function() { x = seq(1000) for(i in seq(1000)) { x[i] <- x[i] + 1 } } prof() => index: "prof":"replicate" vsize.small max.vsize.small vsize.large max.vsize.large 1938 285003 1629 210990 nodes max.nodes duplications tot.duplications 265805 13949348 7 1703 samples 251 Average duplications are just 9 for 1000 executions of x[i] <- x[i] + 1. A lot of optimization seems to be going on! How do I make sense of the output listed in my previous post, then? Best regards -- Carlos On Thu, Jan 24, 2013 at 12:38 AM, Carlos Pita <carlosjosep...@gmail.com> wrote: > Hi, > > I would like to know if it's ok to use .Internal(inspect(x)) in order > to detect vector copying. > > Take for example the following silly code: > > f <- function() { > x = seq(10) > print(.Internal(inspect(x))) > for(i in seq(10)) { > x[i] <- x[i] + 1 > print(.Internal(inspect(x))) > } > } > > The output of f() was: > > @bd7acf0 13 INTSXP g0c4 [NAM(1)] (len=10, tl=0) 1,2,3,4,5,... > [1] 1 2 3 4 5 6 7 8 9 10 > @bdd6f80 14 REALSXP g0c6 [NAM(1)] (len=10, tl=0) 2,2,3,4,5,... > [1] 2 2 3 4 5 6 7 8 9 10 > @ba66278 14 REALSXP g0c6 [NAM(1)] (len=10, tl=0) 2,3,3,4,5,... > [1] 2 3 3 4 5 6 7 8 9 10 > @ba661e0 14 REALSXP g0c6 [NAM(1)] (len=10, tl=0) 2,3,4,4,5,... > [1] 2 3 4 4 5 6 7 8 9 10 > @ba65ee8 14 REALSXP g0c6 [NAM(1)] (len=10, tl=0) 2,3,4,5,5,... > [1] 2 3 4 5 5 6 7 8 9 10 > @ba65e50 14 REALSXP g0c6 [NAM(1)] (len=10, tl=0) 2,3,4,5,6,... > [1] 2 3 4 5 6 6 7 8 9 10 > @ba65db8 14 REALSXP g0c6 [NAM(1)] (len=10, tl=0) 2,3,4,5,6,... > [1] 2 3 4 5 6 7 7 8 9 10 > @ba65c88 14 REALSXP g0c6 [NAM(1)] (len=10, tl=0) 2,3,4,5,6,... > [1] 2 3 4 5 6 7 8 8 9 10 > @ba6a228 14 REALSXP g0c6 [NAM(1)] (len=10, tl=0) 2,3,4,5,6,... > [1] 2 3 4 5 6 7 8 9 9 10 > @ba6a190 14 REALSXP g0c6 [NAM(1)] (len=10, tl=0) 2,3,4,5,6,... > [1] 2 3 4 5 6 7 8 9 10 10 > @ba6a0f8 14 REALSXP g0c6 [NAM(1)] (len=10, tl=0) 2,3,4,5,6,... > [1] 2 3 4 5 6 7 8 9 10 11 > > Notice that the memory reference is different each time. But according > to http://r.789695.n4.nabble.com/full-copy-on-assignment-td1750555.html > I (possibly a mistake on my part) understand that some optimization > should be taking place. > > Is right to conclude from the output above that the entire vector is > being copied each time or is just some kind of "shallow copy" (maybe > some kind of view of the vector but not the vector itself is being > copied). Obviously I'm not familiarized with r internals. > > Best regards > -- > Carlos ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.