下面的代码对&操作进行了基准测试,给出了相反的条件,这些条件是否受益于向量中的惰性求值条件。
set.seed(1)
N <- 1e6
V <- runif(N)
v1 <- V > 0.1
v2 <- V > 0.4
v3 <- V > 0.9
mb_res_le <- microbenchmark::microbenchmark(
times = 100, unit = "ms",
v1 & v2 & v3, v3 & v2 & v1
)
ggplot2::autoplot(mb_res_le)
我理解R 4.2.0的结果。也就是说,由于延迟评估,将更多的FALSE
es分配给&
的LHS执行得更快。但是我不明白为什么R4.3.1的情况是相反的,同样的比较。
在4.2.0和4.3.1之间有几个版本,这可能是在两者之间的某个地方引入的,但我在发行说明中找不到任何可以解释这一点的东西。
我对R 4.3.1的结果感到惊讶。这就是为什么我尝试了早期版本的R,我记得能够解释性能差异。
[添加set.seed(1)
后更新的图]
1条答案
按热度按时间g9icjywg1#
Docker让我们可以轻松地进行比较。我碰巧有R 4.3.1(当前版本)和R 4.2.3(上一个发布周期的最终版本)。我只是简单地添加了
install.packages("microbenchmark")
并打印了结果摘要。然后对于R 4.3.1:
对于R 4.2.3
在基准测试期间的模正态变化看起来是相同的。
修改代码
调用
这是4.2.3的一个,4.3.1显然是类似的: