Three ways to test a vector to see if it contains a given element. Do not tell me instead of using functions, you want to traverse the vector from first element toward the last.
1. match () : return the first appearance, if not exist return NA
> vt <- c('a', 'b', 'c') > match('b', vt) [1] 2 > match('d', vt) [1] NA
2. %in% : return a Boolean
> vt <- c('a', 'b', 'c') > 'a' %in% vt [1] TRUE > 'd' %in% vt [1] FALSE
3. any () : Given a set of logical vectors, to see if at least one of the values is true
> vt <- c('a', 'b', 'c') > any(vt=='a') [1] TRUE > any(vt=='d') [1] FALSE
When the vector is big, the time cost is what need to be considered. I do some simulation and it shows the efficiency ranking for these three functions is (shorter time first) :
any () > match () > %in%