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

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


当前回答

我根本不懂R,但有点创造性的谷歌搜索把我带到了这里:http://tolstoy.newcastle.edu.au/R/help/05/04/1919.html

关键的一句话是:

我没有找到关于R如何从列表中删除元素的明确文档,但试验和错误告诉我

我的列表[5]<- NULL

将删除第5个元素,然后“关闭”由删除该元素引起的孔。这影响了下标值,所以我在删除元素时要小心。我必须从名单的后面到前面。

帖子后面的回复说:

删除列表中的元素,请参见R FAQ 7.1

R FAQ的相关部分说:

... 不要将x[i]或x[[i]]设置为NULL,因为这将从列表中删除相应的组件。

它似乎(以一种有点倒退的方式)告诉您如何删除一个元素。

其他回答

如果您想避免数字索引,可以使用

a <- setdiff(names(a),c("name1", ..., "namen"))

从a中删除名字namea…namen,这适用于列表

> l <- list(a=1,b=2)
> l[setdiff(names(l),"a")]
$b
[1] 2

对于向量也是一样

> v <- c(a=1,b=2)
> v[setdiff(names(v),"a")]
b 
2

这里有一个简单的解决方案,可以使用底数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

我根本不懂R,但有点创造性的谷歌搜索把我带到了这里:http://tolstoy.newcastle.edu.au/R/help/05/04/1919.html

关键的一句话是:

我没有找到关于R如何从列表中删除元素的明确文档,但试验和错误告诉我

我的列表[5]<- NULL

将删除第5个元素,然后“关闭”由删除该元素引起的孔。这影响了下标值,所以我在删除元素时要小心。我必须从名单的后面到前面。

帖子后面的回复说:

删除列表中的元素,请参见R FAQ 7.1

R FAQ的相关部分说:

... 不要将x[i]或x[[i]]设置为NULL,因为这将从列表中删除相应的组件。

它似乎(以一种有点倒退的方式)告诉您如何删除一个元素。

在命名列表的情况下,我发现这些helper函数很有用

member <- function(list,names){
    ## return the elements of the list with the input names
    member..names <- names(list)
    index <- which(member..names %in% names)
    list[index]    
}


exclude <- function(list,names){
     ## return the elements of the list not belonging to names
     member..names <- names(list)
     index <- which(!(member..names %in% names))
    list[index]    
}  
aa <- structure(list(a = 1:10, b = 4:5, fruits = c("apple", "orange"
)), .Names = c("a", "b", "fruits"))

> aa
## $a
##  [1]  1  2  3  4  5  6  7  8  9 10

## $b
## [1] 4 5

## $fruits
## [1] "apple"  "orange"


> member(aa,"fruits")
## $fruits
## [1] "apple"  "orange"


> exclude(aa,"fruits")
## $a
##  [1]  1  2  3  4  5  6  7  8  9 10

## $b
## [1] 4 5

这个怎么样?还是使用下标

> m <- c(1:5)
> m
[1] 1 2 3 4 5

> m[1:length(m)-1]
[1] 1 2 3 4

or

> m[-(length(m))]
[1] 1 2 3 4