Menu
Coddy logo textTech

El Operador %in%

Parte de la sección Fundamentos del Journey de R de Coddy — lección 70 de 78.

A veces necesitas comprobar si existen valores dentro de un vector. El operador %in% proporciona una forma limpia de comprobar la pertenencia, devolviendo TRUE para cada elemento que coincida y FALSE en caso contrario.

La sintaxis básica comprueba si los valores de la izquierda existen en el vector de la derecha:

fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)

Salida:

[1] TRUE

También puedes comprobar varios valores a la vez. El operador devuelve un vector lógico con un resultado por cada valor que se está probando:

fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)

Resultado:

[1]  TRUE FALSE  TRUE

Esto hace que %in% sea perfecto para filtrar. Combinado con la indexación lógica, puedes extraer elementos que pertenecen a un conjunto específico:

numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])

Resultado:

[1] 1 3 2

El operador %in% es especialmente útil al validar la entrada del usuario o filtrar datos basándose en una lista predefinida de valores aceptables.

challenge icon

Desafío

Fácil

Recibirás tres líneas de entrada:

  1. Una lista separada por comas de artículos en tu inventario (por ejemplo, apple,banana,milk,bread,eggs,cheese)
  2. Una lista separada por comas de artículos en tu lista de compras (por ejemplo, milk,butter,eggs,juice)
  3. Una lista separada por comas de artículos que están en oferta (por ejemplo, bread,juice,yogurt)

Usando el operador %in%:

  1. Crea vectores de caracteres a partir de cada entrada separada por comas
  2. Verifica qué artículos de la lista de compras ya tienes en tu inventario e imprime el resultado del vector lógico
  3. Filtra e imprime los artículos de la lista de compras que NO tienes en tu inventario (artículos que necesitas comprar)
  4. Filtra e imprime los artículos que necesitas comprar que también están en oferta

Por ejemplo, si las entradas son:

apple,banana,milk,bread,eggs
milk,butter,eggs,juice,apple
bread,juice,yogurt,butter

La salida debería ser:

[1]  TRUE FALSE  TRUE FALSE  TRUE
[1] "butter" "juice" 
[1] "butter" "juice"

Explicación:

  • Lista de compras verificada contra el inventario: milk (TRUE), butter (FALSE), eggs (TRUE), juice (FALSE), apple (TRUE)
  • Artículos NO en el inventario (necesarios para comprar): butter, juice
  • Artículos para comprar que están en oferta: butter y juice están ambos en la lista de ofertas

Usa el operador ! con %in% para encontrar artículos que NO están en un vector.

Hoja de referencia

El operador %in% comprueba si existen valores dentro de un vector, devolviendo TRUE o FALSE:

fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)

Salida:

[1] TRUE

Compruebe varios valores a la vez para obtener un vector lógico:

fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)

Salida:

[1]  TRUE FALSE  TRUE

Use %in% con indexación lógica para filtrar elementos:

numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])

Salida:

[1] 1 3 2

Use ! con %in% para encontrar elementos que NO están en un vector:

items <- c("milk", "butter", "eggs")
inventory <- c("milk", "eggs")
print(items[!items %in% inventory])

Salida:

[1] "butter"

Pruébalo tú mismo

# Leer entrada
con <- file("stdin", "r")
inventory_input <- suppressWarnings(readLines(con, n = 1))
shopping_list_input <- suppressWarnings(readLines(con, n = 1))
sale_items_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# TODO: Escribe tu código a continuación
# 1. Crear vectores de caracteres a partir de cada entrada separada por comas usando strsplit()
# 2. Verificar qué artículos de la lista de compras ya tienes en el inventario (usar %in%)
# 3. Filtrar los artículos de la lista de compras que NO tienes en el inventario (usar ! con %in%)
# 4. Filtrar los artículos que necesitas comprar que también están en oferta
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos