← R EspañolChapter 03 of 13

Operadores

## Objetivos de Aprendizaje - Dominar operadores aritméticos - Comprender operadores de comparación - Aprender operadores lógicos - Trabajar con vectorización ## Operadores Aritméticos ### Operaciones Básicas ```r a <- 10 b <- 3 a + b # 13 (suma) a - b # 7 (resta) a * b # 30 (multiplicación) a / b # 3.33... (división) a ^ b # 1000 (potencia) a %% b # 1 (módulo) a %/% b # 3 (división entera) ``` ### Comportamiento de la División ```r # División estándar 10 / 3 # 3.333333 # División entera (piso) 10 %/% 3 # 3 # Módulo (resto) 10 %% 3 # 1 ``` ### Incremento/Decremento ```r # R no tiene operador ++, usa esto en su lugar x <- 5 x <- x + 1 # 6 x <- x - 1 # 5 # O usa asignación compuesta x <- 5 x += 1 # 6 x -= 1 # 5 x *= 2 # 10 x /= 2 # 5 ``` ## Operadores de Comparación ### Operadores Relacionales ```r a <- 5 b <- 10 a == b # FALSE (igual) a != b # TRUE (no igual) a < b # TRUE (menor que) a > b # FALSE (mayor que) a <= b # TRUE (menor o igual) a >= b # FALSE (mayor o igual) ``` ### Comparación con NA ```r # Las comparaciones con NA necesitan manejo especial x <- c(1, 2, NA, 4) # Esto retorna NA para comparación con NA x == NA # Usa is.na() en su lugar is.na(x) # FALSE FALSE TRUE FALSE # Filtrar usando complete.cases x[!is.na(x)] # 1 2 4 ``` ## Operadores Lógicos ### AND, OR, NOT ```r a <- TRUE b <- FALSE !a # FALSE (NOT) a & b # FALSE (AND - elemento a elemento) a && b # FALSE (AND - solo primer elemento) a | b # TRUE (OR - elemento a elemento) a || b # TRUE (OR - solo primer elemento) ``` ### Elemento a elemento vs Valor Único ```r # Valores únicos usan && y || if (TRUE && FALSE) { print("No imprimirá") } # Vectores usan & y | c(TRUE, TRUE, FALSE) & c(TRUE, FALSE, FALSE) # TRUE FALSE FALSE ``` ### Evaluación de Cortocircuito ```r # && y || cortocircuitan x <- 0 # No evaluará y / x porque x != 0 es FALSE if (x != 0 && y / x > 2) { "sí" } # || cortocircuita en TRUE if (FALSE || TRUE) { "sí" } ``` ### Tabla de Verdad | A | B | A & B | A \| B | !A | |---|---|-------|--------|-----| | TRUE | TRUE | TRUE | TRUE | FALSE | | TRUE | FALSE | FALSE | TRUE | FALSE | | FALSE | TRUE | FALSE | TRUE | TRUE | | FALSE | FALSE | FALSE | FALSE | TRUE | ## Operadores de Asignación ### Asignación de Variables ```r # Asignación estándar x <- 10 # También funciona pero no es idiomático x = 10 # Asignación global x <<- 10 # Para funciones, se puede usar assign("x", 10) ``` ## Operadores Especiales ### Operador de Secuencia ```r 1:5 # c(1, 2, 3, 4, 5) 5:1 # c(5, 4, 3, 2, 1) -3:3 # c(-3, -2, -1, 0, 1, 2, 3) ``` ### Operador de Membresía ```r # %in% verifica membresía x <- 3 x %in% c(1, 2, 3, 4, 5) # TRUE # Útil para filtrar valores <- c("manzana", "plátano", "cereza") "plátano" %in% valores # TRUE valores %in% c("plátano", "naranja") # FALSE TRUE FALSE ``` ### Operador de Concatenación de Cadenas ```r # %% para concatenación de cadenas nombre <- "Alicia" paste("Hola", nombre) # "Hola Alicia" # paste0 (sin separador) paste0("Hola", nombre) # "HolaAlicia" # estilo sprintf sprintf("Hola %s, tienes %d mensajes", nombre, 5) ``` ### Otros Operadores Especiales ```r # %/% división entera 10 %/% 3 # 3 # %% módulo 10 %% 3 # 1 # %*% multiplicación de matrices mat <- matrix(1:4, nrow = 2) mat %*% mat # Producto de matrices ``` ## Precedencia de Operadores ### De Mayor a Menor | Prioridad | Operadores | |-----------|-------------------| | 1 | `::`, `:::` | | 2 | `[`, `[[` | | 3 | `$`, `@` | | 4 | `^` (unario) | | 5 | `:` (secuencia) | | 6 | `::` | | 7 | `-`, `+` (unario) | | 8 | `::` | | 9 | `%%`, `%/%`, `%*%` | | 10 | `*`, `/` | | 11 | `+`, `-` (binario) | | 12 | `<`, `>`, `<=`, `>=`, `==`, `!=` | | 13 | `!` | | 14 | `&`, `&&` | | 15 | `\|`, `\|\|` | | 16 | `~` | | 17 | `->`, `->>` | | 18 | `<-`, `<<-` | | 19 | `=` | | 20 | `?` (ayuda) | ### Usar Paréntesis ```r # Precedencia clara (a + b) * c # En lugar de confiar en la memoria a + b * c # Multiplica primero ``` ## Vectorización ### ¿Qué es la Vectorización? R realiza operaciones elemento a elemento en vectores. ```r # Suma elemento a elemento c(1, 2, 3) + c(10, 20, 30) # c(11, 22, 33) # Esto es más eficiente que bucles vec <- 1:1000 vec2 <- vec * 2 # No se necesita bucle ``` ### Funciones Vectorizadas ```r # Muchas funciones son naturalmente vectorizadas sqrt(c(1, 4, 9, 16)) # c(1, 2, 3, 4) log(c(1, 10, 100)) # c(0, 2.3, 4.6) ``` ### Reciclado ```r # El vector más corto se recicla c(1, 2) + c(10, 20, 30, 40) # Warning: longer object length not multiple of shorter # Pero con un solo valor c(1, 2, 3) + 10 # c(11, 12, 13) ``` ### Comparación con Bucles ```r # Vectorizado (rápido) result <- sum(1:1000000) # Versión con bucle (lento en R) total <- 0 for (i in 1:1000000) { total <- total + i } ``` ### ifelse Vectorizado ```r # ifelse para condicionales vectorizados x <- 1:10 ifelse(x > 5, "grande", "pequeño") # "pequeño" "pequeño" "pequeño" "pequeño" "pequeño" "grande" "grande" "grande" "grande" "grande" # ifelse anidado puntuacion <- 75 ifelse(puntuacion >= 90, "A", ifelse(puntuacion >= 80, "B", ifelse(puntuacion >= 70, "C", "F"))) # "C" ``` ## Resumen - Aritméticos: `+`, `-`, `*`, `/`, `^`, `%%`, `%/%` - Comparación: `==`, `!=`, `<`, `>`, `<=`, `>=` - Lógicos: `&`, `|`, `!`, `&&`, `||` - Asignación: `<-`, `<<-`, `=` - Especiales: `%in%`, `%%`, `%*%`, `%/%`, `:` (secuencia) - Usa paréntesis para aclarar precedencia - R es vectorizado - las operaciones se aplican elemento a elemento - Usa `ifelse()` para condicionales vectorizados

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →