Mi stavo chiedendo quanto sia più veloce a!=0
sia di !a==0
e utilizzassi il microbenchmark del pacchetto R. Ecco il codice (ridurre 3E6 e 100 se il vostro pc è lento):Tempo di calcolo! =
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)
Ogni volta, ottengo una trama come quella qui sotto. Come previsto, la prima versione è più veloce (in media 26 millisecondi) rispetto alla seconda (33 ms).
Ma da dove provengono questi valori molto alti (valori anomali)? È un qualche effetto di gestione della memoria? Se imposto i tempi su 10, non ci sono valori anomali ...
Modifica: sessionInfo(): R versione 3.1.2 (2014-10-31) Piattaforma: x86_64-w64-mingw32/x64 (64-bit)
Non credo che questo sta per essere facile da rintracciare; Ho visto risultati simili anche con 'times = 10' o giù di lì. Tieni presente che 'microbenchmark' non è a prova di proiettile. Ci sono un paio di blog da qualche parte che indicano i semibugs nel modo in cui raccolgono informazioni sui tempi. Può anche essere semplicemente che qualche altra "cosa" accade di tanto in tanto durante il normale corso delle operazioni di 'R' - una chiamata' gc', o in attesa di riallocazione della RAM a livello di sistema, ecc. Forse prova ad eseguire un ciclo intorno 'system.time' per vedere quale è la distribuzione dei risultati? –