From murdoch.duncan at gmail.com  Fri Oct  8 19:49:32 2010
From: murdoch.duncan at gmail.com (Duncan Murdoch)
Date: Fri, 08 Oct 2010 13:49:32 -0400
Subject: [Rd] NULL assignment will change the expression's class into
 list
In-Reply-To: <AANLkTikEDqTcLeg5X_EELkPTqvFJEu6HLFkOaD4iOr-3@mail.gmail.com>
References: <AANLkTinLmOiRjZA_DhsbYwgCv=ZhQ0DoP-a3hUacG8GP@mail.gmail.com>	<4CAEEEE9.6040607@gmail.com>
	<AANLkTikEDqTcLeg5X_EELkPTqvFJEu6HLFkOaD4iOr-3@mail.gmail.com>
Message-ID: <4CAF59AC.2080104@gmail.com>

  On 08/10/2010 12:24 PM, Vitalie Spinu wrote:
> On Fri, Oct 8, 2010 at 12:14 PM, Duncan Murdoch<murdoch.duncan at gmail.com>wrote:
>
> >  Vitalie Spinu wrote:
> >
> >>  Hello Everyone!
> >>
> >>  NULL replacement will change expression object into list:
> >>
> >>
> >>
> >>>  te<- expression(a=23*4, b=33-2)
> >>>  te
> >>>
> >>>
> >>  expression(a = 23 * 4, b = 33 - 2)
> >>
> >>
> >>
> >>>  te[["a"]]<- quote(blabla) #ok
> >>>  te
> >>>
> >>>
> >>  expression(a = blabla, b = 33 - 2)
> >>
> >>
> >>
> >>>  te[["a"]]<- NULL #change to list
> >>>  te
> >>>
> >>>
> >>  $b
> >>  33 - 2
> >>
> >>  I am on w32, version 2.11.1 (2010-05-31)
> >>
> >>
> >
> >  That's certainly an inconsistency, still present in a recent R-devel (but I
> >  haven't checked the latest beta).  I don't know if it's a bug:  NULL
> >  assignments are handled specially in other situations (e.g. if te was a list
> >  to start, the NULL assignment would remove the "a" entry).
> >
> >  A simple workaround is to use
> >
> >  te["a"]<- expression(NULL)
> >
> >  or te<- te[-1]
> >
> >  instead, depending on what you expected to happen.
> >
>
> As ussual with NULL assignment in recursive structures, I would expect to
> remove the elements altogether. And this is exactly what I need.
>
> I would say it's a bug, because NULL assignment in data.frames would not
> convert them to lists, for example.

I think you're probably right.
> Thanks for looking into it. It's quite inconvenient when you have to
> manipulate named expression. Have to use constructs like
> et<-et[!names(et)%in%"a"].

Or simply follow te["a"] <- NULL

with

te <- as.expression(te)

This is a pretty fast operation if te is an expression or a list formed 
by mistaken conversion from one.

Duncan Murdoch

> Vitally.
>
> >
> >  Duncan Murdoch
> >
> >   Regards,
> >>  Vitally.
> >>
> >>         [[alternative HTML version deleted]]
> >>
> >>  ______________________________________________
> >>  R-devel at r-project.org mailing list
> >>  https://stat.ethz.ch/mailman/listinfo/r-devel
> >>
> >>
> >
> >
>



[Rd] NULL assignment will change the expression's class into list
Duncan Murdoch