> There's little practical difference; both hover from 0.00 to 0.03 s system 
> time. I could barely tell the difference even averaged over 100 runs; I was 
> getting an average around 0.007 (system time) and 2.5s user time for both 
> methods.

It's almost always better to use a high precision timer, as
implemented in the microbenchmark package:

library(microbenchmark)

ssqdif <- function(X, Y=X) {
  #From 'outer' without modification
  Y <- rep(Y, rep.int(length(X), length(Y)))
  X <- rep(X, times = ceiling(length(Y)/length(X)))
  #For this case:
  sum((X-Y)^2) #SLIGHTLY quicker than d<-X-Y; sum(d*d)
}

outerdif <- function(X, Y = X) {
  gg <- outer(X, Y, FUN="-")
  sum(gg*gg)
}

X <- runif(1000)

microbenchmark(
  ssqdif(X),
  outerdif(X)
)

Unit: milliseconds
        expr      min       lq   median       uq      max neval
   ssqdif(X) 9.035473 9.912253 14.65940 16.34044 68.30620   100
 outerdif(X) 8.962955 9.647820 14.85338 17.00048 66.89351   100

Looking at the range of values you can see indeed that the performance
is indeed almost identical.

Hadley

-- 
Chief Scientist, RStudio
http://had.co.nz/

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to