On 11/13/2009 3:03 PM, Trishank Karthik Kuppusamy wrote:
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.

I have mixed feelings about this. If you follow the rule in your programs that setting x to NULL acts the same as not having x at all, then things are fine. (Sometimes that's impossible, but it is what happens when you do the list assignment x$b <- NULL). Use NA or some other special value to signal missing, and NULL will usually cause a visible error soon after if you mess up.


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.

I think the list behaviour is a bad design, but it's been in the language forever, so we're stuck with it. It's related to the bad design of function calls, where arguments can similarly be abbreviated.

Duncan Murdoch


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
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

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

Reply via email to