[Rd] assigning NULLs to elements of a list

Gabor Grothendieck ggrothendieck at gmail.com
Wed Feb 13 15:42:20 CET 2008


But what about by name?

a <- list(a = 1, b = 2, c = 3)

a$b <- NULL


On Feb 13, 2008 9:39 AM, Oleg Sklyar <osklyar at ebi.ac.uk> wrote:
> 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
>
> ______________________________________________
>
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



More information about the R-devel mailing list