[R] NULL elements in lists ... a nightmare

(Ted Harding) Ted.Harding at manchester.ac.uk
Sun Oct 25 09:45:06 CET 2009


[Apologies -- I inadvertently omitted an example, essential for
clarity, from the examples below. Now corrected.]

On 25-Oct-09 09:30:51, Ted Harding wrote:
> On 25-Oct-09 09:52:42, Patrick Burns wrote:
>> 'The R Inferno' page 59.
>> 
>> Patrick Burns
>> patrick at burns-stat.com
>> +44 (0)20 8525 0696
>> http://www.burns-stat.com
>> (home of "The R Inferno" and "A Guide for the Unwilling S User")

Which essentially says that 

  If you want the component [x1[comp] of the list x1] to stay there
  but to be NULL, then do:

    xl[comp] <- list(NULL)

I agree that this can be very puzzling! The essential point is that
(moving to Maura's example)

  myList[2]  or, equivalently,  myList["second"]

is a LIST (whose only component is that component of the original
myList). On the other hand,

  myList[[2]]  or, equivalently,  myList$second

is NOT a list, but is the value of that component of myList:

  myList[1]
  # $first
  # [1] "aaa"

  myList[[1]]
  # [1] "aaa"

  myList["first"]
  # $first
  # [1] "aaa"

  myList[["first"]]
  # [1] "aaa"

  myList$first
  # [1] "aaa"

### the final example added this time, to show that $first is
### the same as [["first]]), i.e. is a value, not a list.

Note the statement (under "Recursive (list-like) objects")
in ?"$" or, equivalently, ?Extract

  When either '[[' or '$' is used for replacement, a value
  of 'NULL' deletes the corresponding item of the list.

Therefore changing the value of a comnponent of a list to NULL
deletes it. So you have to work at the list level, replacing
one list by another list. Hence Patrick's tip.

Ted.

>> mauede at alice.it wrote:
>>> I can define a list containing NULL elements:
>>> 
>>>> myList <- list("aaa",NULL,TRUE)
>>>> names(myList) <- c("first","second","third")
>>>> myList
>>> $first
>>> [1] "aaa"
>>> $second
>>> NULL
>>> $third
>>> [1] TRUE
>>>> length(myList)
>>> [1] 3
>>> 
>>> However, if I assign NULL to any of the list element then such 
>>> element is deleted from the list:
>>> 
>>>> myList$second <- NULL
>>>> myList
>>> $first
>>> [1] "aaa"
>>> $third
>>> [1] TRUE
>>>> length(myList)
>>> [1] 2
>>>> #
>>>> myList$first <- NULL
>>>> myList
>>> $third
>>> [1] TRUE
>>>> length(myList)
>>> [1] 1
>>> 
>>> Instead vectors cannot include NULL element:
>>> 
>>>> vec <- c(TRUE,NULL,FALSE)
>>>> vec
>>> [1]  TRUE FALSE
>>>> length(vec)
>>> [1] 2
>>>> vec[1] <- NULL
>>> Error in vec[1] <- NULL : replacement has length zero
>>> 
>>> Is the above shown behaviour of list data structures to be expected ?
>>> I took me a lot of sweat to figure out this wierd behaviour was the
>>> cause of a bug 
>>> in my big program.
>>> In general, if I have a list with some elements initialized to NULL,
>>> that can be changed 
>>> dynamically, then how can I reinitialize such elements to NULL
>>> without
>>> deleting them 
>>> from the list ?
>>> 
>>> Thank you in advance,
>>> Maura
>>> 
>>> 
>>> 
>>> 
>>> 
>>>      [[alternative HTML version deleted]]
>>> 
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>> 
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
> 
> --------------------------------------------------------------------
> E-Mail: (Ted Harding) <Ted.Harding at manchester.ac.uk>
> Fax-to-email: +44 (0)870 094 0861
> Date: 25-Oct-09                                       Time: 09:30:45
> ------------------------------ XFMail ------------------------------
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at manchester.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 25-Oct-09                                       Time: 09:45:03
------------------------------ XFMail ------------------------------



More information about the R-help mailing list