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