Code
# Vetores
a <- c(1, 2, 3, 4, 5)
b <- c(10, 20, 30, 40, 50)
# Soma vetorizada
c <- a + b
print(c)[1] 11 22 33 44 55
Nesta aula, vamos explorar o conceito de vetorização em R, uma característica poderosa que permite realizar operações em grandes conjuntos de dados de forma eficiente e rápida. Vamos comparar o desempenho das operações vetoriais com loops for e entender por que a vetorização é uma prática recomendada em R.
Vetorização é o processo de aplicar operações a vetores inteiros em uma única chamada de função, sem a necessidade de escrever loops explícitos. Em R, muitas funções são vetorizadas, o que significa que elas podem processar vetores completos de dados de uma só vez.
Vamos começar com um exemplo simples, onde somamos dois vetores:
# Vetores
a <- c(1, 2, 3, 4, 5)
b <- c(10, 20, 30, 40, 50)
# Soma vetorizada
c <- a + b
print(c)[1] 11 22 33 44 55
Nesta operação, cada elemento do vetor a é somado ao elemento correspondente do vetor b em uma única linha de código.
forVamos agora comparar o tempo de execução de operações vetoriais e loops for usando a função system.time() para medir o desempenho.
A função system.time() so R é usada para medir o tempo de execução de uma expressão ou conjunto de expressões. Ela retorna o tempo em segundos necessário para executar o código especificado, dividido em três componentes principais:
forVamos calcular a soma de dois vetores usando um loop for:
# definindo o tamanho dos vetores que seão criados
size <- 100000000
# Vetores com x elementos
a <- rnorm(size)
b <- rnorm(size)
# Criando um vetor para receber a soma dos vetores a e b:
# A linha abaixo serve para pré-alocar memória para o vetor c, que armazenará os resultados da soma dos elementos de a e b.
c <- numeric(size)
# Tempo de execução do loop for
tempo_for <- system.time({for (i in 1:size)
{c[i] <- a[i] + b[i]}
})
print(tempo_for) user system elapsed
2.926 0.118 3.046
Agora, vamos calcular a soma dos mesmos vetores usando vetorização:
# Tempo de execução da vetorização
tempo_vetorizado <- system.time({
c <- a + b
})
print(tempo_vetorizado) user system elapsed
0.031 0.033 0.064
Depois de rodar ambos os códigos, compare os resultados:
print(tempo_for) user system elapsed
2.926 0.118 3.046
print(tempo_vetorizado) user system elapsed
0.031 0.033 0.064
Discussão: - Normalmente, a vetorização é significativamente mais rápida do que o uso de loops for. Isso ocorre porque R é otimizado para realizar operações em vetores inteiros de forma mais eficiente. - Explique que o loop for itera sobre cada elemento individualmente, o que consome mais tempo, enquanto a vetorização opera diretamente sobre o vetor como um todo.
Vetorização é útil em operações matemáticas complexas, como a multiplicação de matrizes:
# Matrizes
mat1 <- matrix(1:9, nrow = 3)
mat2 <- matrix(9:1, nrow = 3)
# Multiplicação vetorizada de matrizes
result <- mat1 %*% mat2
print(result) [,1] [,2] [,3]
[1,] 90 54 18
[2,] 114 69 24
[3,] 138 84 30
Funções estatísticas em R, como média, desvio padrão, etc., são vetorizadas:
# Vetor de dados
dados <- rnorm(1000000)
# Média vetorizada
media <- mean(dados)
print(media)[1] -0.0001008983
A vetorização é uma técnica poderosa em R que pode melhorar significativamente o desempenho dos seus scripts. Sempre que possível, procure formas de evitar loops explícitos e usar funções vetorizadas, especialmente ao trabalhar com grandes conjuntos de dados.
Resumo: - Vetorização permite operações mais rápidas e eficientes. - Loops for são mais lentos e devem ser evitados quando possível. - R oferece muitas funções vetorizadas que podem ser usadas para otimizar o desempenho do código.
for. Compare os tempos de execução.for.