我想知道a!=0比!a==0使用R包microbenchmark 快多少.这是代码(如果你的电脑很慢,减少3e6和100):
library("microbenchmark")
a <- sample(0:1, size=3e6, replace=TRUE)
speed <- microbenchmark(a != 0, ! a == 0, times=100)
boxplot(speed, notch=TRUE, unit="ms", log=F)
Run Code Online (Sandbox Code Playgroud)
每次,我得到一个类似下面的情节.正如所料,第一个版本比第二个版本(33毫秒)更快(中位数为26毫秒).
但这几个非常高的值(异常值)来自哪里呢?是一些内存管理效果?如果我将时间设置为10,则没有异常值......
编辑:sessionInfo():R版本3.1.2(2014-10-31)平台:x86_64-w64-mingw32/x64(64位)

你说当 时没有异常值times=10,但是运行microbenchmark几次times=10,你很可能会看到奇怪的异常值。times=100以下是 的 1 次运行与 10 次运行的比较times=10,表明在两种情况下都会出现异常值。
根据表达式中涉及的对象的大小,我想当您的机器遇到内存限制时,可能会出现异常值,但也可能由于 CPU 压力(例如,由于非 R 进程)而出现异常值。
a <- sample(0:1, size=3e6, replace=TRUE)
speed1 <- microbenchmark(a != 0, ! a == 0, times=100)
speed1 <- as.data.frame(speed1)
speed2 <- replicate(10, microbenchmark(a != 0, ! a == 0, times=10), simplify=FALSE)
speed2 <- do.call(rbind, lapply(speed2, cbind))
times <- cbind(rbind(speed1, speed2), method=rep(1:2, each=200))
boxplot(time ~ expr + method, data=times,
names=c('!=; 1x100', '!==; 1x100', '!=; 10x10', '!==; 10x10'))
Run Code Online (Sandbox Code Playgroud)
