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()的注释中提到的原因