A:如何使用microbenchmark包来测量执行时间


您可以使用R中的microbenchmark包来比较不同表达式的执行时间。

您可以使用以下语法来执行此操作:

 library (microbenchmark)

#compare execution time of two different expressions
microbenchmark(
  expression1,
  expression2)
)

以下示例展示了如何在实践中使用此语法。

示例:在 R 中使用 microbenchmark()

假设我们在 R 中有以下数据框,其中包含有关各个篮球队球员得分的信息:

 #make this example reproducible
set. seed ( 1 )

#create data frame
df <- data. frame (team=rep(c(' A ', ' B '), each= 500 ),
                 points=rnorm( 1000 , mean= 20 ))

#view data frame
head(df)

  team points
1 A 19.37355
2 A 20.18364
3 A 19.16437
4 A 21.59528
5 A 20.32951
6 A 19.17953

现在假设我们要使用两种不同的方法计算每支球队球员的平均得分:

  • 方法 1 :使用 Base R 中的Aggregate()
  • 方法 2 :使用 dplyr 中的group_by()summarise_at()

我们可以使用microbenchmark()函数来测量执行每个表达式所需的时间:

 library (microbenchmark)
library (dplyr)

#time how long it takes to calculate mean value of points by team
microbenchmark(
  aggregate(df$points, list(df$team), FUN=mean),
  df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean))
)

Unit: milliseconds
                                                                    express
                         aggregate(df$points, list(df$team), FUN = mean)
 df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean))
      min lq mean median uq max neval cld
 1.307908 1.524078 1.852167 1.743568 2.093813 4.67408 100 a 
 6.788584 7.810932 9.946286 8.914692 10.239904 56.20928 100 b

microbenchmark()函数运行每个表达式 100 次并测量以下指标:

  • min :执行所需的最短时间
  • lq :完成所需时间的底部四分位数(第 25 个百分位数)
  • Mean : 执行所需的平均时间
  • 中值:中值执行时间
  • uq :执行所需时间的上四分位数(第 75 个百分位数)
  • max : 执行所需的最长时间
  • neval :每个表达式的计算次数

通常,我们只查看执行每个表达式所需的平均或中值时间。

从结果我们可以看出:

  • 使用基于 R 的方法计算团队平均得分平均需要1,852 毫秒
  • 使用 dplyr 方法计算每队平均得分平均需要9.946 毫秒

基于这些结果,我们得出结论,基本 R 方法明显更快。

我们还可以使用boxplot()函数来可视化执行每个表达式所需的时间分布:

 library (microbenchmark)
library (dplyr)

#time how long it takes to calculate mean value of points by team
results <- microbenchmark(
  aggregate(df$points, list(df$team), FUN=mean),
  df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean))
)

#create boxplot to visualize results
boxplot(results, names=c(' Base R ', ' dplyr '))

microbenchmark 包箱线图给出了 R

从箱线图中,我们可以看到 dplyr 方法平均需要更长的时间来计算每支球队的平均分值。

注意:在本示例中,我们使用microbenchmark()函数来比较两个不同表达式的执行时间,但在实践中您可以比较任意多个表达式。

其他资源

以下教程解释了如何在 R 中执行其他常见任务:

如何清除R中的环境
如何清除 RStudio 中的所有绘图
如何在 R 中加载多个包

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注