From jhallman at frb.gov  Tue Feb 12 16:58:28 2008
From: jhallman at frb.gov (Jeffrey J. Hallman)
Date: Tue, 12 Feb 2008 10:58:28 -0500
Subject: [Rd] assigning NULLs to elements of a list
References: <47B17DD3.1080100@ebi.ac.uk>
	<alpine.LFD.1.00.0802121143210.31632@gannet.stats.ox.ac.uk>
Message-ID: <xmrve4u180r.fsf@mralx1.rsma.frb.gov>

>From your tone, I gather you don't much like this behavior, and I can see your
point, as it not very intuitive that setting a list element to NULL deletes
any existing element at that index.  But is there a better way to delete an
element from a list?  Maybe there should be. 

Jeff

Prof Brian Ripley <ripley at stats.ox.ac.uk> writes:
>> I have just came across an (unexpected to me) behaviour of lists when
>> assigning NULLs to list elements. I understand that a NULL is a valid R
>> object, thus assigning a NULL to a list element should yield exactly the
>> same result as assigning any other object. So I was surprised when
>> assigning a NULL in fact removed the element from the list. Is this an
>> intended behaviour? If so, does anybody know where is it documented and
>> what is a good way around?
>
> Yes, it was apparently intended: R has long done this.
>
> x <- list(a=c(1L,2L), b=matrix(runif(4),2,2), c=LETTERS[1:3])
> x[2] <- list(NULL)
>
> is what I think you are intending.
>
> See e.g. the comment in subassign.c
>
>  	    /* If "val" is NULL, this is an element deletion */
>  	    /* if there is a match to "nlist" otherwise "x" */
>  	    /* is unchanged.  The attributes need adjustment. */

-- 
Jeff



[Rd] assigning NULLs to elements of a list
Jeffrey J. Hallman