From osklyar at ebi.ac.uk  Wed Feb 13 15:39:47 2008
From: osklyar at ebi.ac.uk (Oleg Sklyar)
Date: Wed, 13 Feb 2008 14:39:47 +0000
Subject: [Rd] assigning NULLs to elements of a list
In-Reply-To: <xmrve4u180r.fsf@mralx1.rsma.frb.gov>
References: <47B17DD3.1080100@ebi.ac.uk>	<alpine.LFD.1.00.0802121143210.31632@gannet.stats.ox.ac.uk>
	<xmrve4u180r.fsf@mralx1.rsma.frb.gov>
Message-ID: <47B30133.8020802@ebi.ac.uk>

Hmm, I think the pretty traditional R style does the job...

a = list(1,2,3)
a[-2]

So I really do not see a good reason for doing a[2] = NULL instead of a 
= a[-2]

Jeffrey J. Hallman wrote:
>>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. */
> 

-- 
Dr Oleg Sklyar * EBI-EMBL, Cambridge CB10 1SD, UK * +44-1223-494466



[Rd] assigning NULLs to elements of a list
Oleg Sklyar