Menu
Coddy logo textTech

O Operador %in%

Parte da seção Fundamentos do Journey de R da Coddy — lição 70 de 78.

Às vezes, você precisa verificar se valores existem dentro de um vetor. O operador %in% fornece uma maneira limpa de testar a pertinência, retornando TRUE para cada elemento que corresponde e FALSE caso contrário.

A sintaxe básica verifica se os valores à esquerda existem no vetor à direita:

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

Saída:

[1] TRUE

Você também pode verificar vários valores de uma só vez. O operador retorna um vetor lógico com um resultado para cada valor sendo testado:

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

Saída:

[1]  TRUE FALSE  TRUE

Isso torna o %in% perfeito para filtragem. Combinado com indexação lógica, você pode extrair elementos que pertencem a um conjunto específico:

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

Saída:

[1] 1 3 2

O operador %in% é especialmente útil ao validar a entrada do usuário ou filtrar dados com base em uma lista predefinida de valores aceitáveis.

challenge icon

Desafio

Fácil

Você receberá três linhas de entrada:

  1. Uma lista separada por vírgulas de itens em seu inventário (ex: apple,banana,milk,bread,eggs,cheese)
  2. Uma lista separada por vírgulas de itens em sua lista de compras (ex: milk,butter,eggs,juice)
  3. Uma lista separada por vírgulas de itens que estão em promoção (ex: bread,juice,yogurt)

Usando o operador %in%:

  1. Crie vetores de caracteres a partir de cada entrada separada por vírgulas
  2. Verifique quais itens da lista de compras você já possui em seu inventário e imprima o resultado do vetor lógico
  3. Filtre e imprima os itens da lista de compras que você NÃO possui em seu inventário (itens que você precisa comprar)
  4. Filtre e imprima os itens que você precisa comprar e que também estão em promoção

Por exemplo, se as entradas forem:

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

A saída deve ser:

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

Explicação:

  • Lista de compras verificada contra o inventário: milk (TRUE), butter (FALSE), eggs (TRUE), juice (FALSE), apple (TRUE)
  • Itens NÃO presentes no inventário (precisa comprar): butter, juice
  • Itens para comprar que estão em promoção: butter e juice estão ambos na lista de promoção

Use o operador ! com %in% para encontrar itens que NÃO estão em um vetor.

Folha de consulta

O operador %in% verifica se os valores existem dentro de um vetor, retornando TRUE ou FALSE:

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

Saída:

[1] TRUE

Verifique vários valores de uma só vez para obter um vetor lógico:

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

Saída:

[1]  TRUE FALSE  TRUE

Use %in% com indexação lógica para filtrar elementos:

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

Saída:

[1] 1 3 2

Use ! com %in% para encontrar itens que NÃO estão em um vetor:

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

Saída:

[1] "butter"

Experimente você mesmo

# Ler a 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: Escreva seu código abaixo
# 1. Crie vetores de caracteres a partir de cada entrada separada por vírgulas usando strsplit()
# 2. Verifique quais itens da lista de compras você já possui no inventário (use %in%)
# 3. Filtre os itens da lista de compras que você NÃO possui no inventário (use ! com %in%)
# 4. Filtre os itens que você precisa comprar que também estão em promoção
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos