On Nov 24, 2011, at 14:05 , Matthew Dowle wrote:

> Since list() is primitive I tried to construct a data.frame starting with
> list() [since structure() isn't primitive], but then merely adding an
> attribute seems to set NAMED==2 too ?

Yes. As soon as there is the slightest risk of having (had) two references to 
the same object NAMED==2 and it is never reduced. While your mind is boggling, 
I might boggle it a bit more:

> z <- 1:10
> .Internal(inspect(z))
@116e11788 13 INTSXP g0c4 [NAM(1)] (len=10, tl=0) 1,2,3,4,5,...
> m <- mean(z)
> .Internal(inspect(z))
@116e11788 13 INTSXP g0c4 [NAM(2)] (len=10, tl=0) 1,2,3,4,5,...

This happens because while mean() is running, there is a second reference to z, 
namely mean's argument x. (With languages like R, you have no insurance that 
there will be no changes to the global environment while a function call is 
being evaluated, so bugs can bite in both places -- z or x.)

There are many of these cases where you might pragmatically want to override 
the default NAMED logic, but you'd be stepping into treacherous waters. Luke 
has probably been giving these matters quite some thought in connection with 
his compiler project.

-- 
Peter Dalgaard, Professor
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd....@cbs.dk  Priv: pda...@gmail.com

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to