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] TRUEVocê 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 TRUEIsso 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 2O operador %in% é especialmente útil ao validar a entrada do usuário ou filtrar dados com base em uma lista predefinida de valores aceitáveis.
Desafio
FácilVocê receberá três linhas de entrada:
- Uma lista separada por vírgulas de itens em seu inventário (ex:
apple,banana,milk,bread,eggs,cheese) - Uma lista separada por vírgulas de itens em sua lista de compras (ex:
milk,butter,eggs,juice) - Uma lista separada por vírgulas de itens que estão em promoção (ex:
bread,juice,yogurt)
Usando o operador %in%:
- Crie vetores de caracteres a partir de cada entrada separada por vírgulas
- Verifique quais itens da lista de compras você já possui em seu inventário e imprima o resultado do vetor lógico
- Filtre e imprima os itens da lista de compras que você NÃO possui em seu inventário (itens que você precisa comprar)
- 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,butterA 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] TRUEVerifique 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 TRUEUse %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 2Use ! 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çãoEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores Parte 2
Operadores Lógicos (AND, OR)Operadores Lógicos Parte 2 (NOT)Recapitulação - Lógica SimplesLógica Vetorizada Parte 1Lógica Vetorizada Parte 27Calculadora de Divisão de Conta
Mensagem de Boas-vindasObtendo a Entrada do Usuário10FizzBuzz com um Toque Especial
Visão Geral do JogoA Função FizzBuzz13Vetores Avançados
Fatiamento e Indexação de VetoresIndexação LógicaAritmética de Vetores e ReciclagemO Operador %in%2Variáveis e Tipos de Dados
Tipo de Dado NuméricoTipo de Dado InteiroTipo de Dado CaractereTipo de Dado LógicoVerificando Tipos de DadosConvenções de NomenclaturaValores Ausentes: NARecapitulação - Criação de Variáveis8Laços de Repetição
Laço ForLaço WhileBreakNext (Continue)Recapitulação - FatorialGeração de Sequências (seq, :)Laços AninhadosRecapitulação - Entrada Dinâmica3Operadores Parte 1
Operadores AritméticosDivisão Inteira e MóduloOperadores de AtribuiçãoRecapitulação - Matemática SimplesOperadores de Comparação6IO Básico
Saída com PrintCat para SaídaSaída com VariáveisLendo Entrada com readline()Básico de Conversão de TiposRecapitulação - Calculadora de IdadeRecapitulação - Verdadeiro ou Falso9Funções
Declarando uma FunçãoArgumentos de FunçãoValores de RetornoRecapitulação - Função SigmaRecapitulação - Função de ValidaçãoValores de Parâmetro Padrão