Re: [Rd] The default behaviour of a missing entry in an environment

From: Duncan Murdoch <>
Date: Fri, 13 Nov 2009 14:47:38 -0500

On 11/13/2009 2:39 PM, Trishank Karthik Kuppusamy wrote:
> Hello Duncan,
> Thanks for your reply.
> On Nov 13, 2009, at 2:27 PM, Duncan Murdoch wrote:

>> You get the same behaviour when asking for a nonexistent element of a list, or a nonexistent attribute.   If you want stricter checking, don't use $, use get():
>> > get("b", e)
>> Error in get("b", e) : object 'b' not found

> Yes, this is a solution. However, if we agree that "$" is (as it should be) syntactic sugar for get(), then why do we have different behaviour
> for what should essentially be the same operations, albeit the former being easier to read and write than the latter?
> Or is my premise mistaken and that is the whole point of having "$" and get() which are not identical?
>> But then it would be inconsistent with what it does in other situations.

> I am afraid that I did not fully understand this point. What would the inconsistencies be in other situations?

Inconsistent with what happens for lists:

 > x <- list()
 > x$b
NULL and attributes:

 > attr(x, "b")
NULL It is already a little stricter than $ on a list:

 > x$longname <- 1
 > x$long
[1] 1
 > e$longname <- 1
 > e$long
NULL 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.

Duncan Murdoch mailing list Received on Fri 13 Nov 2009 - 19:50:46 GMT

This archive was generated by hypermail 2.2.0 : Fri 13 Nov 2009 - 20:50:26 GMT