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()
# none #my_answers <- make_random_answers(my_sol) my_answers <- rep(NA, 5) type_question <- 'string' ex_name <- 'otimizing 13-03'
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.
extype: r type_question
exsolution: r mchoice2string(c(TRUE, FALSE, FALSE, FALSE, FALSE), single = TRUE)
exname: r ex_name
exshuffle: TRUE
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.