删除包含特定字符串的整个列表元素

时间:2015-05-25 10:11:37

标签: r list

var1是一个列表:

var1 <- list(c("tall tree", "fruits", "star"),  
             c("tree tall", "pine tree", "tree pine", "black forest", "water"), 
             c("apple", "orange", "grapes"), 
             c("ancient pine tree", "all trees"))

我需要从包含术语&#34; pine&#34;的列表中完全删除这些元素。

所需答案是一个清单:

[[1]]
[1] "tall tree" "fruits"    "star"    
[[2]]
[1] "apple"  "orange" "grapes"

由于

4 个答案:

答案 0 :(得分:13)

你可以在这里试试$ionicConfigProvider.views.swipeBackEnabled(false);

Filter

答案 1 :(得分:6)

var1[lapply(var1,function(x) length(grep("pine",x,value=FALSE))) == 0]

答案 2 :(得分:3)

这是一个老问题,但我想我会添加另一个选项。 stringr包中的“str_”函数非常适合列表中的模式匹配。

如果您要查找匹配的所有列表条目,您可以使用:

library(stringr)
str_subset(var1,pattern="pine")

但由于您希望匹配的列表条目,您可以使用:

library(stringr)
var1[!str_detect(var1,pattern="pine")]

str_detect(list,pattern)返回逻辑列表,因此您可以使用inverse(!)将列表子集化为与模式不匹配的条目。

答案 3 :(得分:0)

或者可以执行:

 var2<-lapply(var1,function(x) if(all(grepl(pattern = "^(?!.*pine).*$",x,perl = T)==T)) return(x) else NA);var2[!is.na(var2)]