Choses surprenantes pour optimiser le code dans R
Ce post se base sur les informations trouvées sur le blog de Radford Neal http://radfordneal.wordpress.com/201...hings-about-r/, qui traite de la rapidité de commandes de base dans R.
Le fait remplacer les parenthèses dans les formules mathématique par des accolades, pour preuve :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
a <- 5; b <- 1; c <- 4
f <- function (n) for (i in 1:n) d <- 1/{a*{b+c}}
g <- function (n) for (i in 1:n) d <- 1/(a*(b+c))
require(rbenchmark)
benchmark(f(1000000),
g(1000000),
columns=c("test", "replications",
"elapsed", "relative"),
order="relative", replications = 1)
test replications elapsed relative
1 f(1e+06) 1 1.028 1.000
2 g(1e+06) 1 1.085 1.055 |
La fonction utilisant les accolades est plus rapide de plus de 5%.
On a également un gain de temps lorsque l'on fait le calcule d'une moyenne ou de variance à la main :
Code:
1 2 3 4 5 6 7 8
|
> M <- 1:10000
> system.time(for(i in 1:10000) mean(M))
utilisateur système écoulé
0.152 0.000 0.150
> system.time(for(i in 1:10000) sum(M)/length(M))
utilisateur système écoulé
0.132 0.000 0.131 |
Le calcul effectué à la main est plus rapide, mais à proscrire car cette dernière ne rééquilibre pas le calcul comme le fait la fonction 'mean'.