首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用microbenchmark评估多行码块

使用microbenchmark评估多行码块
EN

Stack Overflow用户
提问于 2017-12-27 21:29:05
回答 1查看 503关注 0票数 5

是否可以使用微基准测试来评估由多行代码组成的代码块?如果是这样的话,是怎么做的?

示例:我们在字符列中有一些数字数据:

代码语言:javascript
复制
testdata <- tibble::tibble(col1 = runif(1000), col2 = as.character(runif(1000)), col3 = as.character(runif(1000)))

现在我们可以尝试不同的方法来转换它们。我们可以直接在列上调用as.numeric:

代码语言:javascript
复制
testdata$col2 <- as.numeric(testdata$col2)
testdata$col3 <- as.numeric(testdata$col3)

我们可以尝试在一个dplyr变异体中这样做:

代码语言:javascript
复制
testdata <- dplyr::mutate(testdata, col2 = as.numeric(col2),
               col3 = as.numeric(col3))

或者,我们可能知道所有列都应该是数字,所以我们可以尝试一些不太明确的检查:

代码语言:javascript
复制
testdata <- dplyr::mutate_if(testdata, .predicate = is.character, .funs = as.numeric)

现在我们想要比较这三个选项的性能。

后两个选项是单独的调用,因此可以很容易地在microbenchmark中进行测试,但第一个选项由两个单独的调用组成。我们可以将这两个调用包装在一个函数中,然后在microbenchmark中对其进行评估,但这会引入该函数的轻微开销,因此在技术上不会评估我们现在已有的解决方案。我们可以在微基准中单独包含调用,然后将它们相加,因为平均值应该可以做得很好,但对于像min或max这样的东西,这不一定会给出合理的结果。

文档中的microbenchmark示例大多使用简单的单个表达式,并且通常使用一个简单的函数来包装代码。

是否可以将多行代码直接输入到microbenchmark中一起进行评估?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-27 21:29:05

通过将多行代码包装在{}中并使用;将它们分开,可以在微基准测试中将它们作为一个块进行评估

代码语言:javascript
复制
bench <- microbenchmark(separate = {as.numeric(testdata$col2); as.numeric(testdata$col3)},
                    mutate = dplyr::mutate(testdata, col2 = as.numeric(col2),
                                           col3 = as.numeric(col3)),
                    mutateif = dplyr::mutate_if(testdata, .predicate = is.character, .funs = as.numeric))

它给出了以下结果:

代码语言:javascript
复制
> bench
Unit: microseconds
     expr      min       lq      mean    median        uq        max neval
 separate  477.014  529.708  594.8982  576.4275  611.6275   1109.762   100
   mutate 3410.351 3633.070 4465.0583 3876.6975 4446.0845  34298.910   100
 mutateif 5118.725 5365.126 7241.5727 5637.5520 6290.7795 118874.982   100
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47993055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档