On Fri, Oct 8, 2010 at 12:14 PM, Duncan Murdoch <murdoch.duncan@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.

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"].

Vitally.

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

	[[alternative HTML version deleted]]

