R函数用于testing向量是否包含给定元素

在R中,你如何testing一个向量,看它是否包含给定的元素?

match() (返回第一个外观)和%in% (返回一个布尔值)函数都是为此devise的。

 v <- c('a','b','c','e') 'b' %in% v ## returns TRUE match('b',v) ## returns the first location of 'b', in this case: 2 

is.element()提供了更多可读代码,与%in%

 v <- c('a','b','c','e') is.element('b', v) 'b' %in% v ## both return TRUE is.element('f', v) 'f' %in% v ## both return FALSE subv <- c('a', 'f') subv %in% v ## returns a vector TRUE FALSE is.element(subv, v) ## returns a vector TRUE FALSE 

any()函数使可读代码

 > w <- c(1,2,3) > any(w==1) [1] TRUE > v <- c('a','b','c') > any(v=='b') [1] TRUE > any(v=='f') [1] FALSE 

您可以使用%in%运算符%in%

 vec <- c(1, 2, 3, 4, 5) 1 %in% vec # true 10 %in% vec # false 

也可以find元素“哪个”可以用作的位置

 pop <- c(3,4,5,7,13) which(pop==13) 

并find不包含在目标向量中的元素,可以这样做:

 pop <- c(1,2,4,6,10) Tset <- c(2,10,7) # Target set pop[which(!(pop%in%Tset))] 

我非常喜欢grep()和grepl()。

grep()返回一个整数向量,表示匹配的地方。

 yo <- c("a", "a", "b", "b", "c", "c") grep("b", yo) [1] 3 4 

grepl()返回一个逻辑向量,在匹配位置为“TRUE”。

 yo <- c("a", "a", "b", "b", "c", "c") grepl("b", yo) [1] FALSE FALSE TRUE TRUE FALSE FALSE 

这些function是区分大小写的。

我将根据输出对选项进行分组。 假设下面的所有例子都是向量。

 v <- c('z', 'a','b','a','e') 

检查存在:

%在%

 > 'a' %in% v [1] TRUE 

任何()

 > any('a'==v) [1] TRUE 

is.element()

 > is.element('a', v) [1] TRUE 

为了find第一个发生:

比赛()

 > match('a', v) [1] 2 

为了find所有的发生作为指标的向量:

哪一个()

 > which('a' == v) [1] 2 4 

为了find所有的发生作为逻辑向量

==

 > 'a' == v [1] FALSE TRUE FALSE TRUE FALSE 

编辑:从列表中删除grep()grepl()的注释中提到的原因