我有一个列表,我想从其中删除一个元素。我该怎么做呢?

我试着在参考手册中查找我认为这个函数的明显名称,但我没有找到任何合适的名称。


当前回答

我想补充的是,如果它是一个命名列表,你可以简单地使用。

l <- list(a = 1, b = 2)    
> within(l, rm(a))
$b
[1] 2

所以你可以覆盖原来的列表

l <- within(l, rm(a)) 

从列表l中删除名为a的元素。

其他回答

下面是如何在R中删除列表的最后一个元素:

x <- list("a", "b", "c", "d", "e")
x[length(x)] <- NULL

如果x可能是一个向量,那么你需要创建一个新对象:

x <- c("a", "b", "c", "d", "e")
x <- x[-length(x)]

处理列表和向量

还可以使用magrittr包的提取函数从列表中进行负索引以删除列表项。

a <- seq(1,5)
b <- seq(2,6)
c <- seq(3,7)
l <- list(a,b,c)

library(magrittr)

extract(l,-1) #simple one-function method
[[1]]
[1] 2 3 4 5 6

[[2]]
[1] 3 4 5 6 7

这里有一个简单的解决方案,可以使用底数r。它从原始的数字列表中删除数字5。您可以使用相同的方法从列表中删除任何您想要的元素。

#the original list
original_list = c(1:10)

#the list element to remove
remove = 5

#the new list (which will not contain whatever the `remove` variable equals)
new_list = c()

#go through all the elements in the list and add them to the new list if they don't equal the `remove` variable
counter = 1
for (n in original_list){
  if (n != ){
    new_list[[counter]] = n
    counter = counter + 1
  }
}

new_list变量不再包含5。

new_list
# [1]  1  2  3  4  6  7  8  9 10

使用lapply和grep:

lst <- list(a = 1:4, b = 4:8, c = 8:10)
# say you want to remove a and c
toremove<-c("a","c")
lstnew<-lst[-unlist(lapply(toremove, function(x) grep(x, names(lst)) ) ) ]
#or
pattern<-"a|c"
lstnew<-lst[-grep(pattern, names(lst))]

你可以用which。

x<-c(1:5)
x
#[1] 1 2 3 4 5
x<-x[-which(x==4)]
x
#[1] 1 2 3 5