Capítulo 13 Otimização de Código
Você chegou ao fim da versão online do livro Análise de Dados Financeiros e Econômicos com o R, terceira edição. O conteúdo integral da obra pode ser adquirido na loja da Amazon como ebook ou livro impresso. A compra do livro é uma ótima maneira de suportar este e outros projetos do autor.
13.1 Otimizando Código em R
Você chegou ao fim da versão online do livro Análise de Dados Financeiros e Econômicos com o R, terceira edição. O conteúdo integral da obra pode ser adquirido na loja da Amazon como ebook ou livro impresso. A compra do livro é uma ótima maneira de suportar este e outros projetos do autor.
13.2 Otimizando a Velocidade de Execução
Você chegou ao fim da versão online do livro Análise de Dados Financeiros e Econômicos com o R, terceira edição. O conteúdo integral da obra pode ser adquirido na loja da Amazon como ebook ou livro impresso. A compra do livro é uma ótima maneira de suportar este e outros projetos do autor.
13.2.1 Perfil do Código R (profiling)
Você chegou ao fim da versão online do livro Análise de Dados Financeiros e Econômicos com o R, terceira edição. O conteúdo integral da obra pode ser adquirido na loja da Amazon como ebook ou livro impresso. A compra do livro é uma ótima maneira de suportar este e outros projetos do autor.
13.2.2 Estratégias para Melhorar a Velocidade de Execução
Você chegou ao fim da versão online do livro Análise de Dados Financeiros e Econômicos com o R, terceira edição. O conteúdo integral da obra pode ser adquirido na loja da Amazon como ebook ou livro impresso. A compra do livro é uma ótima maneira de suportar este e outros projetos do autor.
13.2.2.1 Use Operações Vetoriais
Você chegou ao fim da versão online do livro Análise de Dados Financeiros e Econômicos com o R, terceira edição. O conteúdo integral da obra pode ser adquirido na loja da Amazon como ebook ou livro impresso. A compra do livro é uma ótima maneira de suportar este e outros projetos do autor.
13.2.2.2 Junção Repetitiva de dataframes
Você chegou ao fim da versão online do livro Análise de Dados Financeiros e Econômicos com o R, terceira edição. O conteúdo integral da obra pode ser adquirido na loja da Amazon como ebook ou livro impresso. A compra do livro é uma ótima maneira de suportar este e outros projetos do autor.
13.2.3 Usando Código C ++ (pacote Rcpp
)
Você chegou ao fim da versão online do livro Análise de Dados Financeiros e Econômicos com o R, terceira edição. O conteúdo integral da obra pode ser adquirido na loja da Amazon como ebook ou livro impresso. A compra do livro é uma ótima maneira de suportar este e outros projetos do autor.
13.2.4 Usando Cacheamento Local (pacote memoise
)
Você chegou ao fim da versão online do livro Análise de Dados Financeiros e Econômicos com o R, terceira edição. O conteúdo integral da obra pode ser adquirido na loja da Amazon como ebook ou livro impresso. A compra do livro é uma ótima maneira de suportar este e outros projetos do autor.
13.2.4.1 Usando Processamento Paralelo (pacote furrr
)
Você chegou ao fim da versão online do livro Análise de Dados Financeiros e Econômicos com o R, terceira edição. O conteúdo integral da obra pode ser adquirido na loja da Amazon como ebook ou livro impresso. A compra do livro é uma ótima maneira de suportar este e outros projetos do autor.
13.3 Exercícios
Q.1
Considere o seguinte código:
library(tidyverse)
library(forecast)
library(BatchGetSymbols)
ticker <- '^GSPC'
df_prices <- BatchGetSymbols(tickers = ticker,
first.date = '2010-01-01')[[2]]
my_arima <- auto.arima(df_prices$ret.adjusted.prices)
summary(my_arima)
Use funcões Rprof
e profvis
para identificar o gargalo do código. Qual número da linha que está tomando maior tempo de execução?
Q.2
Use o pacote Rcpp
para escrever e usar uma função em linguagem C++ que irá adicionar elementos dos vetores x
e y
, elemento por elemento. A saída deve ser outro vetor de mesmo tamanho e com elementos iguais a operação x + y
. Use a função identical
para testar se todos os elementos de ambos os vetores são iguais.
Q.3
Use o pacote tictoc
para comparar o desempenho da função anterior com o operador nativo +
, e uma versão baseada em loops com pré-alocação. Qual alternativa apresenta menor tempo de execução e por quê? A versão Rcpp
vence a versão em loop?
A melhor alternativa é o operador nativo +
. Este já é otimizado e executa o cálculo rapidamente.
library(Rcpp)
cppFunction('Rcpp::NumericVector sum_vectors_C(NumericVector x, NumericVector y) {
int n = x.size();
Rcpp::NumericVector total(x.size());
for(int i = 0; i < n; ++i) {
total[i] = x[i] + y[i];
}
return total;
}')
x <- runif(100)
y <- runif(100)
sol_C <- sum_vectors_C(x, y)
sol_R <- x + y
identical(sol_C, sol_R)
library(tictoc)
tic('Using Rcpp')
sol_C <- sum_vectors_C(x, y)
toc()
tic('Using base R')
sol_R <- x + y
toc()
tic('Using a loop and prealocation')
sol_loop <- numeric(length = length(x))
for (i in 1:length(x)) {
sol_loop[i] <- x[i] + y[i]
}
toc()
Q.4
Use o pacote memoise
para criar uma versão memorizada de Quandl::Quandl
. Use a nova função para importar dados para o Índice de Preços ao Consumidor dos Estados Unidos (código 'FRED/DDOE01USA086NWDB'
). Quanto de ganho de velocidade em porcentagem você obtém da segunda chamada para a versão memorizada?