Jak najdu úzké místo?

Efektivní kód v R

Colin Gillespie

Jumping Rivers & Newcastle University

Efektivní kód v R

Profilování kódu

Obecná myšlenka spočívá v:

  • Spuštění kódu
  • Záznamu aktuálně prováděné operace každých několik milisekund
  • Rprof() je součástí R a dělá přesně toto
    • Složité použití
  • Místo toho použijte profvis
Efektivní kód v R

Datová sada IMDB

  • Z balíčku ggplot2movies
data(movies, package = "ggplot2movies")
dim(movies)
58788    24
  • Datový rámec: přibližně 60 000 řádků a 24 sloupců
  • Každý řádek odpovídá jednomu filmu
Efektivní kód v R

Statečné srdce

braveheart = movies[7288,]
Rok Délka Hodnocení
1995 177 8.3

Efektivní kód v R

Příklad: Statečné srdce

# 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")

Efektivní kód v R

Profvis

  • RStudio má integrovanou podporu profilování pomocí profvis
    • Označte kód, který chcete profilovat
    • Profile -> Profile Selected lines

Efektivní kód v R

Příkazová řádka

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

Který řádek bude podle vás nejpomalejší?

Efektivní kód v R

Efektivní kód v R

Efektivní kód v R

Pojďme procvičovat!

Efektivní kód v R

Preparing Video For Download...