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 '))
从箱线图中,我们可以看到 dplyr 方法平均需要更长的时间来计算每支球队的平均分值。
注意:在本示例中,我们使用microbenchmark()函数来比较两个不同表达式的执行时间,但在实践中您可以比较任意多个表达式。
其他资源
以下教程解释了如何在 R 中执行其他常见任务: