[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