包含内存和运行时间的microbenchmark的R语言等效函数

10

背景:
这是R语言的“微基准测试”包: https://cran.r-project.org/web/packages/microbenchmark/index.html

参考手册中的第一行指出,该包是为“准确计时函数”而构建的。

其中一个问题是内在的时间与空间的权衡。有些解决方案对内存要求很高,但CPU速度快;有些则对CPU要求很高,但内存占用非常小。

问题:
如何在R中同时、并且具有良好的分辨率,对执行时间和执行期间的内存使用进行基准测试/微基准测试?


我喜欢这个问题,但感觉它不适合在SO上讨论... - r2evans
1
是的:"要求我们推荐或找到一本书、工具、软件库",https://stackoverflow.com/help/on-topic - r2evans
2
profvis包可以进行一些内存分析,但我认为它不容易比较多个解决方案的内存使用情况。 - Marius
1
很高兴看到这个问题,所以我说我喜欢这个问题(希望它可能是例外)。感谢您的坚持,我希望看到一个好的答案(因为我没有一个现成的答案)。关于澄清主题的相关点也很好,不确定我是否记得这部分。 - r2evans
2
EngrStudent,如果你找到了一种类似于microbenchmark的更简单的顶层内存使用比较方法,我建议(请求?)你提供一个快速的自我回答。如果你没有时间,也许你可以建议一个profvis问题,建议使用情况,我知道我会“+1”的。 - r2evans
显示剩余5条评论
1个回答

13

迟到总比不到好:你可以使用 bench::mark() 来测量代码的时间和内存使用情况(以及一些其他变量)。

例如,(参见 ?mark 的帮助页面)

library(bench)

dat <- data.frame(x = runif(100, 1, 1000), y=runif(10, 1, 1000))
mark(
  dat[dat$x > 500, ],
  dat[which(dat$x > 500), ],
  subset(dat, x > 500)
)
#> # A tibble: 3 x 6
#>   expression                     min   median `itr/sec` mem_alloc `gc/sec`
#>   <bch:expr>                <bch:tm> <bch:tm>     <dbl> <bch:byt>    <dbl>
#> 1 dat[dat$x > 500, ]          21.7µs   23.6µs    40663.    4.15KB     89.7
#> 2 dat[which(dat$x > 500), ]   22.2µs   24.1µs    40228.    2.77KB     92.7
#> 3 subset(dat, x > 500)          36µs   39.2µs    23867.   20.12KB     86.2

该内容于2020年03月02日由reprex包(v0.3.0)创建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接