How can I remove an element from a list?


Question

I have a list and I want to remove a single element from it. How can I do this?

I've tried looking up what I think the obvious names for this function would be in the reference manual and I haven't found anything appropriate.

1
240
12/23/2015 5:42:52 PM

Accepted Answer

I don't know R at all, but a bit of creative googling led me here: http://tolstoy.newcastle.edu.au/R/help/05/04/1919.html

The key quote from there:

I do not find explicit documentation for R on how to remove elements from lists, but trial and error tells me

myList[[5]] <- NULL

will remove the 5th element and then "close up" the hole caused by deletion of that element. That suffles the index values, So I have to be careful in dropping elements. I must work from the back of the list to the front.

A response to that post later in the thread states:

For deleting an element of a list, see R FAQ 7.1

And the relevant section of the R FAQ says:

... Do not set x[i] or x[[i]] to NULL, because this will remove the corresponding component from the list.

Which seems to tell you (in a somewhat backwards way) how to remove an element.

Hope that helps, or at least leads you in the right direction.

193
3/16/2009 9:16:57 PM

If you don't want to modify the list in-place (e.g. for passing the list with an element removed to a function), you can use indexing: negative indices mean "don't include this element".

x <- list("a", "b", "c", "d", "e"); # example list

x[-2];       # without 2nd element

x[-c(2, 3)]; # without 2nd and 3rd

Also, logical index vectors are useful:

x[x != "b"]; # without elements that are "b"

This works with dataframes, too:

df <- data.frame(number = 1:5, name = letters[1:5])

df[df$name != "b", ];     # rows without "b"

df[df$number %% 2 == 1, ] # rows with odd numbers only

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon