使用microbenchmark评估由多行代码组成的代码块是否可能?如果可以,如何实现?
示例: 我们有一些字符列中的数字数据:
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中一起进行评估?