Probar si un vector contiene un elemento dado
¿Cómo comprobar si un vector contiene un valor determinado?
Aceptado
Tanto la función match()
(devuelve la primera aparición) como %in%
(devuelve un booleano) están diseñadas para esto.
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()
hace que el código sea más legible y es idéntico a%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
Agruparé las opciones según el resultado. Suponga el siguiente vector para todos los ejemplos.
v <- c('z', 'a','b','a','e')
Para comprobar la presencia:
%en%
> 'a' %in% v
[1] TRUE
cualquier()
> any('a'==v)
[1] TRUE
es.elemento()
> is.element('a', v)
[1] TRUE
Para encontrar la primera aparición:
fósforo()
> match('a', v)
[1] 2
Para encontrar todas las ocurrencias como vector de índices:
cual()
> which('a' == v)
[1] 2 4
Para encontrar todas las ocurrencias como vector lógico :
==
> 'a' == v
[1] FALSE TRUE FALSE TRUE FALSE
Editar: Eliminar grep() y grepl() de la lista por el motivo mencionado en los comentarios
La función any() crea código legible
> 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
Puedes utilizar el %in%
operador:
vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false