我有一个列表,我想从其中删除一个元素。我该怎么做呢?
我试着在参考手册中查找我认为这个函数的明显名称,但我没有找到任何合适的名称。
我有一个列表,我想从其中删除一个元素。我该怎么做呢?
我试着在参考手册中查找我认为这个函数的明显名称,但我没有找到任何合适的名称。
当前回答
我想补充的是,如果它是一个命名列表,你可以简单地使用。
l <- list(a = 1, b = 2)
> within(l, rm(a))
$b
[1] 2
所以你可以覆盖原来的列表
l <- within(l, rm(a))
从列表l中删除名为a的元素。
其他回答
如果你有一个命名列表,想要删除一个特定的元素,你可以尝试:
lst <- list(a = 1:4, b = 4:8, c = 8:10)
if("b" %in% names(lst)) lst <- lst[ - which(names(lst) == "b")]
这将创建一个包含元素a, b, c的列表lst。第二行在检查元素b是否存在后删除元素b(以避免@hjv提到的问题)。
或更好:
lst$b <- NULL
这样,尝试删除一个不存在的元素就不是问题(例如lst$g <- NULL)
你可以用which。
x<-c(1:5)
x
#[1] 1 2 3 4 5
x<-x[-which(x==4)]
x
#[1] 1 2 3 5
还可以使用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
单行从列表中删除Null元素:
x = x(((酸式焦磷酸钠(x, is.null) arr.ind = TRUE)))
干杯
在命名列表的情况下,我发现这些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