【发布时间】:2018-06-08 03:36:28
【问题描述】:
是否可以使用微基准评估由多行代码组成的代码块?如果有,怎么做?
示例: 我们在字符列中有一些数字数据:
testdata <- tibble::tibble(col1 = runif(1000), col2 = as.character(runif(1000)), col3 = as.character(runif(1000)))
现在我们可以尝试不同的方式来转换它们。 我们可以直接在列上调用 as.numeric:
testdata$col2 <- as.numeric(testdata$col2)
testdata$col3 <- as.numeric(testdata$col3)
我们可以尝试在 dplyr mutate 中执行此操作:
testdata <- dplyr::mutate(testdata, col2 = as.numeric(col2),
col3 = as.numeric(col3))
或者也许我们知道所有列都应该是数字的,所以我们可以尝试一些不太明确的东西来做一些检查:
testdata <- dplyr::mutate_if(testdata, .predicate = is.character, .funs = as.numeric)
现在我们要比较这 3 个选项的性能。
后两个选项是单独的调用,因此可以很容易地在微基准测试中进行测试,但第一个选项由两个单独的调用组成。我们可以将这两个调用包装在一个函数中,然后在 microbenchmark 中对其进行评估,但这会引入函数的轻微开销,因此在技术上并不能评估我们现在拥有的解决方案。我们可以将调用分别包含在微基准测试中,然后在之后将它们相加,因为平均值应该没问题,但对于像最小值或最大值这样的东西,这不一定给出合理的结果。
微基准测试文档中的示例大多使用简单的单个表达式,并且经常使用简单的函数来包装代码。
是否可以直接将多行代码输入到微基准中一起评估?
【问题讨论】:
标签: r microbenchmark