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

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

Reply via email to