Hur hittar jag flaskhalsen?

Effektiv R-kod

Colin Gillespie

Jumping Rivers & Newcastle University

Effektiv R-kod

Kodprofilering

Grundidén är att:

  • Köra koden
  • Var några millisekunder registrera vad som körs just då
  • Rprof() ingår i R och gör exakt detta
    • Krånglig att använda
  • Använd profvis i stället
Effektiv R-kod

IMDB-datamängd

  • Från paketet ggplot2movies
data(movies, package = "ggplot2movies")
dim(movies)
58788    24
  • Dataram: ungefär 60 000 rader och 24 kolumner
  • Varje rad motsvarar en specifik film
Effektiv R-kod

Braveheart

braveheart = movies[7288,]
Year Length Rating
1995 177 8.3

Effektiv R-kod

Exempel: 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")

Effektiv R-kod

Profvis

  • RStudio har inbyggt stöd för profilering med profvis
    • Markera koden du vill profilera
    • Profile -> Profile Selected lines

Effektiv R-kod

Kommandoraden

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)
})

Vilken rad tror du är långsammast?

Effektiv R-kod

Effektiv R-kod

Effektiv R-kod

Nu kör vi en övning!

Effektiv R-kod

Preparing Video For Download...