On 08/10/2010 12:24 PM, Vitalie Spinu wrote:
On Fri, Oct 8, 2010 at 12:14 PM, Duncan Murdoch<murdoch.dun...@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@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