Menu
Coddy logo textTech

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 TRUE

Cada 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 FALSE

Você 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 TRUE

Lembre-se: use os simples &, | e ! ao trabalhar com vetores, e os duplos &&, || ao comparar valores únicos.

challenge icon

Desafio

Fácil

Use 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:

  1. Crie um vetor chamado failed que armazene TRUE para cada pontuação que NÃO seja maior ou igual a 60
  2. Crie um vetor chamado absent que armazene o oposto de attended (inverta cada valor)
  3. Crie um vetor chamado at_risk que armazene TRUE para cada aluno que NÃO compareceu OU NÃO entregou o dever de casa
  4. Crie um vetor chamado passing_but_absent que armazene TRUE para cada aluno que tem uma pontuação maior ou igual a 60 E NÃO compareceu
  5. Crie um vetor chamado needs_support que armazene TRUE para 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 TRUE

Use ! para encontrar elementos que não atendem a uma condição:

temperatures <- c(18, 25, 30, 15, 22)
!(temperatures > 20)  # TRUE FALSE FALSE TRUE FALSE

Combine 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 TRUE

Lembre-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)
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