From tk47 at nyu.edu  Fri Nov 13 21:03:03 2009
From: tk47 at nyu.edu (Trishank Karthik Kuppusamy)
Date: Fri, 13 Nov 2009 15:03:03 -0500
Subject: [Rd] The default behaviour of a missing entry in an environment
In-Reply-To: <4AFDB7DA.3080104@stats.uwo.ca>
References: <D737F65B-A317-44C1-8421-E8DE2D0E0740@nyu.edu>
	<4AFDB33D.5010607@stats.uwo.ca>
	<39831344-CF89-4D0C-9804-702B80D4DE4C@nyu.edu>
	<4AFDB7DA.3080104@stats.uwo.ca>
Message-ID: <6BB98E4A-8539-4C69-B754-2180AC6D7369@nyu.edu>


On Nov 13, 2009, at 2:47 PM, Duncan Murdoch wrote:

> Inconsistent with what happens for lists:
> 
> > x <- list()
> > x$b
> NULL
> 
> and attributes:
> 
> > attr(x, "b")
> NULL

Ah, I see. I would claim that the same argument for default safety should apply here too.

> It is already a little stricter than $ on a list:
> 
> > x$longname <- 1
> > x$long
> [1] 1
> > e$longname <- 1
> > e$long
> NULL

I apologize that I cannot say that this is a good idea for reasons of safety and readability.

> so I supposed we could make it even more strict, but there is an awful lot of code out there that uses tests like
> 
> if (!is.null(x <- e$b)) { do something with x }
> 
> and all of that would break.

Unfortunately, such code does make it harder to detect programming errors.
I understand should the hands of R be tied by backwards-compatability; bad habits are hard to break.
Thanks for your time.

-Trishank


[Rd] The default behaviour of a missing entry in an environment
Trishank Karthik Kuppusamy