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 TRUECada 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 FALSEPuedes 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 TRUERecuerda: utiliza &, | y ! simples cuando trabajes con vectores, y &&, || dobles al comparar valores individuales.
Desafío
FácilUsa 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:
- Crea un vector llamado
failedque almaceneTRUEpara cada puntuación que NOT sea mayor o igual a 60 - Crea un vector llamado
absentque almacene lo opuesto aattended(invierte cada valor) - Crea un vector llamado
at_riskque almaceneTRUEpara cada estudiante que NOT asistió OR NOT entregó la tarea - Crea un vector llamado
passing_but_absentque almaceneTRUEpara cada estudiante que tenga una puntuación mayor o igual a 60 AND NOT asistió - Crea un vector llamado
needs_supportque almaceneTRUEpara 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 TRUEUse ! para encontrar elementos que no cumplen una condición:
temperatures <- c(18, 25, 30, 15, 22)
!(temperatures > 20) # TRUE FALSE FALSE TRUE FALSECombine 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 TRUERecuerde: 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)Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores Parte 2
Operadores lógicos (AND, OR)Operadores lógicos Parte 2 (NOT)Resumen - Lógica simpleLógica vectorizada Parte 1Lógica vectorizada Parte 27Calculadora para dividir la cuenta
Mensaje de bienvenidaObtener la entrada del usuario2Variables y tipos de datos
Tipo de dato numéricoTipo de dato enteroTipo de dato de caracteresTipo de dato lógicoComprobación de tipos de datosConvenciones de nomenclaturaValores faltantes: NAResumen - Creación de variables8Bucles
Bucle ForBucle WhileBreakNext (Continue)Repaso - FactorialGeneración de secuencias (seq, :)Bucles anidadosRepaso - Entrada dinámica3Operadores Parte 1
Operadores aritméticosDivisión entera y móduloOperadores de asignaciónRepaso - Matemáticas simplesOperadores de comparación6E/S básica
Imprimir salidaCat para salidaSalida con variablesLectura de entrada con readline()Conceptos básicos de conversión de tiposResumen - Calculadora de edadResumen - Verdadero o falso9Funciones
Declarar una funciónArgumentos de una funciónValores de retornoRepaso - Función SigmaRepaso - Función de validaciónValores de parámetros por defecto