我有一个列表,我想从其中删除一个元素。我该怎么做呢?
我试着在参考手册中查找我认为这个函数的明显名称,但我没有找到任何合适的名称。
我有一个列表,我想从其中删除一个元素。我该怎么做呢?
我试着在参考手册中查找我认为这个函数的明显名称,但我没有找到任何合适的名称。
当前回答
这个怎么样?还是使用下标
> 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
其他回答
如果你有一个命名列表,想要删除一个特定的元素,你可以尝试:
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)
这里有一个简单的解决方案,可以使用底数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
使用-(负号)与元素的位置一起,例如,如果要删除第三个元素,则使用your_list[-3]
输入
my_list <- list(a = 3, b = 3, c = 4, d = "Hello", e = NA)
my_list
# $`a`
# [1] 3
# $b
# [1] 3
# $c
# [1] 4
# $d
# [1] "Hello"
# $e
# [1] NA
从列表中删除单个元素
my_list[-3]
# $`a`
# [1] 3
# $b
# [1] 3
# $d
# [1] "Hello"
# $e
[1] NA
从列表中删除多个元素
my_list[c(-1,-3,-2)]
# $`d`
# [1] "Hello"
# $e
# [1] NA
my_list[c(-3:-5)]
# $`a`
# [1] 3
# $b
# [1] 3
my_list[-seq(1:2)]
# $`c`
# [1] 4
# $d
# [1] "Hello"
# $e
# [1] NA
如果您想避免数字索引,可以使用
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
不知道你是否还需要回答这个问题,但我从我有限的(3周的自学R) R经验中发现,使用NULL赋值实际上是错误的或次优的,特别是当你在动态更新一个列表时,比如for循环。
更准确地说,使用
myList[[5]] <- NULL
会抛出错误
myList[[5]] <- NULL:替换长度为0
or
供应的元素多于可供替换的元素
我发现更有效的方法是
myList <- myList[[-5]]