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

From: Duncan Murdoch <murdoch_at_stats.uwo.ca>
Date: Fri, 13 Nov 2009 16:24:21 -0500

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


R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Fri 13 Nov 2009 - 21:28:45 GMT

This archive was generated by hypermail 2.2.0 : Fri 13 Nov 2009 - 23:50:24 GMT