Cum găsesc blocajul?

Scrierea codului R eficient

Colin Gillespie

Jumping Rivers & Newcastle University

Scrierea codului R eficient

Profilarea codului

Ideea generală este să:

  • Rulați codul
  • La fiecare câteva milisecunde, înregistrați ce se execută
  • Rprof()este inclus în R și face exact asta
    • Dificil de utilizat
  • Utilizați profvis în schimb
Scrierea codului R eficient

Setul de date IMDB

  • Din pachetul ggplot2movies
data(movies, package = "ggplot2movies")
dim(movies)
58788    24
  • DataFrame: aproximativ 60.000 de rânduri și 24 de coloane
  • Fiecare rând corespunde unui film
Scrierea codului R eficient

Braveheart

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

Scrierea codului R eficient

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

Scrierea codului R eficient

Profvis

  • RStudio are suport integrat pentru profilare cu profvis
    • Selectați codul pe care doriți să îl profilați
    • Profile -> Profile Selected lines

Scrierea codului R eficient

Linia de comandă

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

Ce linie credeți că va fi cea mai lentă?

Scrierea codului R eficient

Scrierea codului R eficient

Scrierea codului R eficient

Să exersăm!

Scrierea codului R eficient

Preparing Video For Download...