Menu
Coddy logo textTech

Aritmética de Vetores e Reciclagem

Parte da seção Fundamentos do Journey de R da Coddy — lição 69 de 78.

Quando você realiza operações aritméticas entre dois vetores do mesmo comprimento, o R aplica a operação elemento por elemento:

a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)

Saída:

[1] 11 22 33

Mas o que acontece quando os vetores têm comprimentos diferentes? O R utiliza um comportamento chamado recycling (reciclagem). O vetor mais curto é repetido para corresponder ao comprimento do mais longo:

numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)

Saída:

[1]  10 200  30 400  50 600

Aqui, multiplier foi reciclado para se tornar c(10, 100, 10, 100, 10, 100) antes da multiplicação. Isso é especialmente útil ao operar com um único valor:

prices <- c(10, 20, 30)
print(prices * 1.1)

Saída:

[1] 11 22 33

O valor único 1.1 é reciclado para corresponder ao comprimento de prices. Tenha cuidado quando o comprimento do vetor mais longo não for um múltiplo do mais curto, pois o R ainda realizará a operação, mas poderá produzir um aviso sobre reciclagem parcial.

challenge icon

Desafio

Fácil

Você receberá duas linhas de entrada:

  1. Uma lista de números separados por vírgula representando valores base (ex: 10,20,30,40,50,60)
  2. Uma lista de multiplicadores separados por vírgula (ex: 2,5)

Usando aritmética de vetores e reciclagem:

  1. Crie um vetor numérico a partir dos valores base
  2. Crie um vetor numérico a partir dos multiplicadores
  3. Multiplique os valores base pelos multiplicadores (o R reciclará o vetor mais curto)
  4. Imprima o resultado da multiplicação
  5. Adicione 100 a cada elemento dos valores base originais (reciclagem de valor único)
  6. Imprima o resultado da adição
  7. Subtraia o vetor de multiplicadores do vetor de valores base
  8. Imprima o resultado da subtração

Por exemplo, se as entradas forem:

5,10,15,20,25,30
3,7

A saída deve ser:

[1]  15  70  45 140  75 210
[1] 105 110 115 120 125 130
[1]  2  3 12 13 22 23

Explicação:

  • Multiplicação: Os multiplicadores c(3, 7) são reciclados para c(3, 7, 3, 7, 3, 7), resultando em 5*3, 10*7, 15*3, 20*7, 25*3, 30*7
  • Adição: O valor único 100 é reciclado para ser somado a cada elemento
  • Subtração: Os multiplicadores são reciclados novamente, resultando em 5-3, 10-7, 15-3, 20-7, 25-3, 30-7

Folha de consulta

Ao realizar operações aritméticas entre vetores de comprimentos diferentes, o R utiliza a reciclagem (recycling) - o vetor mais curto é repetido para corresponder ao comprimento do vetor mais longo:

numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)

Saída:

[1]  10 200  30 400  50 600

O vetor multiplier é reciclado para c(10, 100, 10, 100, 10, 100) antes da multiplicação.

A reciclagem de um único valor é particularmente útil:

prices <- c(10, 20, 30)
print(prices * 1.1)

Saída:

[1] 11 22 33

O valor 1.1 é reciclado para corresponder ao comprimento de prices.

Nota: O R pode produzir um aviso (warning) quando o comprimento do vetor mais longo não é um múltiplo do comprimento do vetor mais curto.

Experimente você mesmo

# Ler a entrada
con <- file("stdin", "r")
base_input <- suppressWarnings(readLines(con, n = 1))
multipliers_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# Converter os valores separados por vírgula em vetores numéricos
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])

# TODO: Escreva seu código abaixo
# 1. Multiplicar base_values por multipliers (a reciclagem ocorrerá automaticamente)
# 2. Imprimir o resultado da multiplicação
# 3. Somar 100 a cada elemento de base_values
# 4. Imprimir o resultado da soma
# 5. Subtrair multipliers de base_values
# 6. Imprimir o resultado da subtração
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