Comment repérer le goulot d'étranglement?

Écrire du code R efficace

Colin Gillespie

Jumping Rivers & Newcastle University

Écrire du code R efficace

Profilage de code

L'idée générale :

  • Exécuter le code
  • Toutes les quelques millisecondes, noter ce qui s'exécute
  • Rprof() est fourni avec R et fait exactement cela
    • Difficile à utiliser
  • Utilisez plutôt profvis
Écrire du code R efficace

Ensemble de données IMDB

  • Du paquet ggplot2movies
data(movies, package = "ggplot2movies")
dim(movies)
58788    24
  • Trame de données : environ 60 000 lignes et 24 colonnes
  • Chaque ligne correspond à un film
Écrire du code R efficace

Braveheart

braveheart = movies[7288,]
Année Durée Cote
1995 177 8.3

Écrire du code R efficace

Exemple : Braveheart

# Load data
data(movies,
     package = "ggplot2movies")
braveheart <- movies[7288,]
movies <- movies[movies$Action==1,]

plot(movies$year, movies$rating, xlab = "Year", ylab = "Rating")
# local regression line model <- loess(rating ~ year, data = movies) j <- order(movies$year) lines(movies$year[j], model$fitted[j], col = "forestgreen")
points(braveheart$year, braveheart$rating, pch = 21, bg = "steelblue")

Écrire du code R efficace

Profvis

  • RStudio prend en charge le profilage avec profvis
    • Surlignez le code à profiler
    • Profile -> Profile Selected lines

Écrire du code R efficace

Ligne de commande

library("profvis")

profvis({
data(movies, package = "ggplot2movies") # Load data braveheart <- movies[7288,] movies <- movies[movies$Action == 1,] plot(movies$year, movies$rating, xlab = "Year", ylab="Rating") model <- loess(rating ~ year, data = movies) # loess regression line j <- order(movies$year) lines(movies$year[j], model$fitted[j], col="forestgreen", lwd=2) points(braveheart$year, braveheart$rating, pch = 21, bg = "steelblue", cex = 3)
})

Selon vous, quelle ligne sera la plus lente?

Écrire du code R efficace

Écrire du code R efficace

Écrire du code R efficace

Passons à la pratique !

Écrire du code R efficace

Preparing Video For Download...