Lógica Vetorizada Parte 2
Parte da seção Fundamentos do Journey de R da Coddy — lição 21 de 78.
Assim como o AND e o OR possuem versões vetorizadas, o operador NOT também funciona elemento a elemento em vetores. Quando você aplica ! a um vetor de valores lógicos, ele inverte cada elemento individualmente.
passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed # FALSE TRUE FALSE TRUECada TRUE torna-se FALSE, e cada FALSE torna-se TRUE. Isso é particularmente útil quando você deseja encontrar elementos que não atendem a uma determinada condição:
temperatures <- c(18, 25, 30, 15, 22)
# Encontrar temperaturas que NÃO são superiores a 20
!(temperatures > 20) # TRUE FALSE FALSE TRUE FALSEVocê pode combinar o NOT vetorizado com & e | para construir filtros complexos:
ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)
# Pode participar se: idade >= 18 OU (menor de 18 E tem permissão)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUELembre-se: use os simples &, | e ! ao trabalhar com vetores, e os duplos &&, || ao comparar valores únicos.
Desafio
FácilUse o operador NOT vetorizado (!) junto com & e | para criar condições lógicas complexas elemento a elemento.
Você recebeu os seguintes vetores:
scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)Use operadores lógicos vetorizados, incluindo o operador NOT, para criar os seguintes vetores lógicos:
- Crie um vetor chamado
failedque armazeneTRUEpara cada pontuação que NÃO seja maior ou igual a 60 - Crie um vetor chamado
absentque armazene o oposto deattended(inverta cada valor) - Crie um vetor chamado
at_riskque armazeneTRUEpara cada aluno que NÃO compareceu OU NÃO entregou o dever de casa - Crie um vetor chamado
passing_but_absentque armazeneTRUEpara cada aluno que tem uma pontuação maior ou igual a 60 E NÃO compareceu - Crie um vetor chamado
needs_supportque armazeneTRUEpara cada aluno onde: (a pontuação é menor que 50) OU (NÃO compareceu E NÃO entregou o dever de casa)
Use a função print() para exibir failed, absent, at_risk, passing_but_absent e needs_support exatamente nessa ordem.
Folha de consulta
O operador NOT (!) funciona elemento a elemento em vetores, invertendo cada valor lógico individualmente:
passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed # FALSE TRUE FALSE TRUEUse ! para encontrar elementos que não atendem a uma condição:
temperatures <- c(18, 25, 30, 15, 22)
!(temperatures > 20) # TRUE FALSE FALSE TRUE FALSECombine o NOT vetorizado com & e | para filtros complexos:
ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)
# Pode participar se: idade >= 18 OU (menor de 18 E tem permissão)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUELembre-se: use &, | e ! simples para vetores; use &&, || duplos para valores únicos.
Experimente você mesmo
# Vetores fornecidos
scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)
# TODO: Escreva seu código abaixo
# 1. Crie 'failed' - TRUE para pontuações NÃO >= 60
# 2. Crie 'absent' - o oposto de attended
# 3. Crie 'at_risk' - NÃO attended OU NÃO submitted homework
# 4. Crie 'passing_but_absent' - score >= 60 E NÃO attended
# 5. Crie 'needs_support' - (score < 50) OU (NÃO attended E NÃO submitted homework)
# Imprima os resultados
print(failed)
print(absent)
print(at_risk)
print(passing_but_absent)
print(needs_support)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
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 FizzBuzz2Variá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