# R – n R function for finding the index of an element in a vector

indexingmatchrvectorization

In R, I have an element `x` and a vector `v`. I want to find the first index of an element in `v` that is equal to `x`. I know that one way to do this is: `which(x == v)[[1]]`, but that seems excessively inefficient. Is there a more direct way to do it?

For bonus points, is there a function that works if `x` is a vector? That is, it should return a vector of indices indicating the position of each element of `x` in `v`.

#### Best Solution

The function `match` works on vectors:

``````x <- sample(1:10)
x
# [1]  4  5  9  3  8  1  6 10  7  2
match(c(4,8),x)
# [1] 1 5
``````

`match` only returns the first encounter of a match, as you requested. It returns the position in the second argument of the values in the first argument.

For multiple matching, `%in%` is the way to go:

``````x <- sample(1:4,10,replace=TRUE)
x
# [1] 3 4 3 3 2 3 1 1 2 2
which(x %in% c(2,4))
# [1]  2  5  9 10
``````

`%in%` returns a logical vector as long as the first argument, with a `TRUE` if that value can be found in the second argument and a `FALSE` otherwise.