match                  package:base                  R Documentation

_V_a_l_u_e _M_a_t_c_h_i_n_g

_D_e_s_c_r_i_p_t_i_o_n:

     `match' returns a vector of the positions of (first) matches of
     its first argument in its second.

     `%in%' is a more intuitive interface as a binary operator, which
     returns a logical vector indicating if there is a match or not for
     its left operand.

_U_s_a_g_e:

     match(x, table, nomatch = NA, incomparables = FALSE)
     x %in% table

_A_r_g_u_m_e_n_t_s:

       x: the values to be matched.

   table: the values to be matched against.

 nomatch: the value to be returned in the case when no match is found.

incomparables: a vector of values that cannot be matched.  Any value in
          `x' matching a value in this vector is assigned the `nomatch'
          value.  Currently, `FALSE' is the only possible value,
          meaning that all values can be matched.

_D_e_t_a_i_l_s:

     `%in%' is currently defined as 
     `"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0'

     Factors are converted to character vectors, and then `x' and
     `table' are coerced to a common type (the later of the two types
     in R's ordering, logical < integer < numeric < complex <
     character) before matching.

_V_a_l_u_e:

     In both cases, a vector of the same length as `x'.

     `match': A numeric vector giving the position in `table' of the
     first match if there is a match, otherwise `nomatch'.

     If `x[i]' is found to equal `table[j]' then the value returned in
     the `i'-th position of the return value is `j', for the smallest
     possible `j'.  If no match is found, the value is `nomatch'.

     `%in%': A logical vector, indicating if a match was located for
     each element of `x'.

_S_e_e _A_l_s_o:

     `pmatch' and `charmatch' for (partial) string matching,
     `match.arg', etc for function argument matching.

     `is.element' for an S-compatible equivalent of `%in%'.

_E_x_a_m_p_l_e_s:

     ## The intersection of two sets :
     intersect <- function(x, y) y[match(x, y, nomatch = 0)]
     intersect(1:10,7:20)

     1:10 %in% c(1,3,5,9)
     sstr <- c("c","ab","B","bba","c","@","bla","a","Ba","%")
     sstr[sstr %in% c(letters,LETTERS)]

     "%w/o%" <- function(x,y) x[!x %in% y] #--  x without y
     (1:10) %w/o% c(3,7,12)

