如何找到性能瓶颈?

高效 R 代码写作

Colin Gillespie

Jumping Rivers & Newcastle University

高效 R 代码写作

代码分析(Profiling)

总体思路:

  • 运行代码
  • 每隔几毫秒记录当前正在执行的内容
  • Rprof() 随 R 提供,正是做这个的
    • 使用较棘手
  • 改用 profvis
高效 R 代码写作

IMDB 数据集

  • 来自 ggplot2movies
data(movies, package = "ggplot2movies")
dim(movies)
58788    24
  • 数据框:约 60,000 行、24 列
  • 每行对应一部电影
高效 R 代码写作

勇敢的心

braveheart = movies[7288,]
年份 片长 评分
1995 177 8.3

高效 R 代码写作

示例:勇敢的心

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

高效 R 代码写作

Profvis

  • RStudio 集成了使用 profvis 的分析支持
    • 选中要分析的代码
    • Profile -> Profile Selected lines

高效 R 代码写作

命令行

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

您认为哪一行最慢?

高效 R 代码写作

高效 R 代码写作

高效 R 代码写作

让我们来练习!

高效 R 代码写作

Preparing Video For Download...