Aritmética de Vectores y Reciclaje
Parte de la sección Fundamentos del Journey de R de Coddy — lección 69 de 78.
Cuando realizas operaciones aritméticas entre dos vectores de la misma longitud, R aplica la operación elemento por elemento:
a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)Salida:
[1] 11 22 33¿Pero qué sucede cuando los vectores tienen diferentes longitudes? R utiliza un comportamiento llamado reciclaje (recycling). El vector más corto se repite para coincidir con la longitud del más largo:
numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)Salida:
[1] 10 200 30 400 50 600Aquí, multiplier fue reciclado para convertirse en c(10, 100, 10, 100, 10, 100) antes de la multiplicación. Esto es especialmente útil cuando se opera con un solo valor:
prices <- c(10, 20, 30)
print(prices * 1.1)Salida:
[1] 11 22 33El valor único 1.1 se recicla para coincidir con la longitud de prices. Ten cuidado cuando la longitud del vector más largo no sea un múltiplo de la del más corto, ya que R seguirá realizando la operación pero puede producir una advertencia sobre el reciclaje parcial.
Desafío
FácilRecibirás dos líneas de entrada:
- Una lista de números separados por comas que representan valores base (por ejemplo,
10,20,30,40,50,60) - Una lista de multiplicadores separados por comas (por ejemplo,
2,5)
Utilizando aritmética de vectores y reciclaje:
- Crea un vector numérico a partir de los valores base
- Crea un vector numérico a partir de los multiplicadores
- Multiplica los valores base por los multiplicadores (R reciclará el vector más corto)
- Imprime el resultado de la multiplicación
- Suma
100a cada elemento de los valores base originales (reciclaje de un solo valor) - Imprime el resultado de la suma
- Resta el vector de multiplicadores del vector de valores base
- Imprime el resultado de la resta
Por ejemplo, si las entradas son:
5,10,15,20,25,30
3,7La salida debería ser:
[1] 15 70 45 140 75 210
[1] 105 110 115 120 125 130
[1] 2 3 12 13 22 23Explicación:
- Multiplicación: Los multiplicadores
c(3, 7)se reciclan ac(3, 7, 3, 7, 3, 7), resultando en5*3, 10*7, 15*3, 20*7, 25*3, 30*7 - Suma: El valor único
100se recicla para sumarse a cada elemento - Resta: Los multiplicadores se reciclan nuevamente, resultando en
5-3, 10-7, 15-3, 20-7, 25-3, 30-7
Hoja de referencia
Al realizar operaciones aritméticas entre vectores de diferentes longitudes, R utiliza el reciclaje (recycling): el vector más corto se repite para que coincida con la longitud del más largo:
numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)Salida:
[1] 10 200 30 400 50 600El vector multiplier se recicla a c(10, 100, 10, 100, 10, 100) antes de la multiplicación.
El reciclaje de un solo valor es particularmente útil:
prices <- c(10, 20, 30)
print(prices * 1.1)Salida:
[1] 11 22 33El valor 1.1 se recicla para coincidir con la longitud de prices.
Nota: R puede producir una advertencia cuando la longitud del vector más largo no es un múltiplo de la del más corto.
Pruébalo tú mismo
# Leer entrada
con <- file("stdin", "r")
base_input <- suppressWarnings(readLines(con, n = 1))
multipliers_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Analizar los valores separados por comas en vectores numéricos
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])
# TODO: Escribe tu código a continuación
# 1. Multiplicar base_values por multipliers (el reciclaje ocurrirá automáticamente)
# 2. Imprimir el resultado de la multiplicación
# 3. Sumar 100 a cada elemento de base_values
# 4. Imprimir el resultado de la suma
# 5. Restar multipliers de base_values
# 6. Imprimir el resultado de la restaEsta 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 usuario10FizzBuzz con un giro
Descripción general del juegoLa función FizzBuzz13Vectores Avanzados
Segmentación e Indexación de VectoresIndexación LógicaAritmética de Vectores y ReciclajeEl Operador %in%2Variables 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