[Rd] The default behaviour of a missing entry in an environment
Duncan Murdoch
murdoch at stats.uwo.ca
Fri Nov 13 20:47:38 CET 2009
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
More information about the R-devel
mailing list