Menu
Coddy logo textTech

Lógica vectorizada Parte 2

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

Al igual que AND y OR tienen versiones vectorizadas, el operador NOT también funciona elemento a elemento en vectores. Cuando aplicas ! a un vector de valores lógicos, este invierte cada elemento individualmente.

passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed  # FALSE TRUE FALSE TRUE

Cada TRUE se convierte en FALSE, y cada FALSE se convierte en TRUE. Esto es particularmente útil cuando quieres encontrar elementos que no cumplen con una condición determinada:

temperatures <- c(18, 25, 30, 15, 22)

# Encontrar temperaturas que NO sean superiores a 20
!(temperatures > 20)  # TRUE FALSE FALSE TRUE FALSE

Puedes combinar el NOT vectorizado con & y | para construir filtros complejos:

ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)

# Puede participar si: edad >= 18 O (menor de 18 Y tiene permiso)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUE

Recuerda: utiliza &, | y ! simples cuando trabajes con vectores, y &&, || dobles al comparar valores individuales.

challenge icon

Desafío

Fácil

Usa el operador NOT vectorizado (!) junto con & y | para crear condiciones lógicas complejas elemento a elemento.

Se te proporcionan los siguientes vectores:

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)

Usa operadores lógicos vectorizados, incluyendo el operador NOT, para crear los siguientes vectores lógicos:

  1. Crea un vector llamado failed que almacene TRUE para cada puntuación que NOT sea mayor o igual a 60
  2. Crea un vector llamado absent que almacene lo opuesto a attended (invierte cada valor)
  3. Crea un vector llamado at_risk que almacene TRUE para cada estudiante que NOT asistió OR NOT entregó la tarea
  4. Crea un vector llamado passing_but_absent que almacene TRUE para cada estudiante que tenga una puntuación mayor o igual a 60 AND NOT asistió
  5. Crea un vector llamado needs_support que almacene TRUE para cada estudiante donde: (la puntuación es menor que 50) OR (NOT asistió AND NOT entregó la tarea)

Usa la función print() para mostrar failed, absent, at_risk, passing_but_absent y needs_support en ese orden exacto.

Hoja de referencia

El operador NOT (!) funciona elemento a elemento en vectores, invirtiendo cada valor lógico individualmente:

passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed  # FALSE TRUE FALSE TRUE

Use ! para encontrar elementos que no cumplen una condición:

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

Combine el NOT vectorizado con & y | para filtros complejos:

ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)

# Puede participar si: edad >= 18 O (menor de 18 Y tiene permiso)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUE

Recuerde: use los operadores simples &, | y ! para vectores; use los dobles &&, || para valores únicos.

Pruébalo tú mismo

# Vectores dados
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: Escribe tu código a continuación
# 1. Crear 'failed' - TRUE para puntuaciones que NO sean >= 60

# 2. Crear 'absent' - lo opuesto a attended

# 3. Crear 'at_risk' - NO asistió O NO entregó la tarea

# 4. Crear 'passing_but_absent' - puntuación >= 60 Y NO asistió

# 5. Crear 'needs_support' - (puntuación < 50) O (NO asistió Y NO entregó la tarea)

# Imprimir los resultados
print(failed)
print(absent)
print(at_risk)
print(passing_but_absent)
print(needs_support)
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