我遇到了R的range功能。它肯定是有用的工具,并使代码更具可读性,但是通过将其替换为简单的单行代码包括min和可以使其速度提高一倍max。
我做了一些基准测试,范围函数的“糟糕”表现令我感到惊讶。为了进行比较,我编写了一个名为range2min和max 的函数(请参见代码)。除了速度之外,如果可以通过简单的单线(也易于阅读)来执行此功能,那么是否有任何原因为什么存在此功能?
require(microbenchmark)
range2 <- function(x) c(min(x),max(x))
n <- 1000000
x <- rnorm(n)
microbenchmark(range(x), range2(x))
#Unit: milliseconds
# expr min lq mean median uq max neval cld
# range(x) 4.696101 4.734751 5.321603 4.796301 4.814751 23.0646 100 b
#range2(x) 2.477602 2.516101 2.542540 2.535051 2.544052 3.7636 100 a
n <- 10000000
x <- rnorm(n)
microbenchmark(range(x), range2(x))
# Unit: milliseconds
# expr min lq mean median uq max neval cld
# range(x) 47.3246 47.9498 …Run Code Online (Sandbox Code Playgroud)