Benchmarking Funtime

library(microbenchmark)
library(data.table)
library(ggplot2)

df <- data.frame(ID = 1:1e+05, Score = 4 * 1e+05:1, matrix(rnorm(3e+06), ncol = 3))
DT <- data.table(df)

aPaulDF <- function() {
    data.frame(diff(as.matrix(df)))
}

aPaulM <- function() {
    diff(as.matrix(df))
}

simonDF <- function() {
    data.frame(apply(df, 2, diff))
}

simonM <- function() {
    apply(df, 2, diff)
}

aDF <- function() {
    tail(df, -1) - head(df, -1)
}

aDT <- function() {
    DT[, lapply(.SD, diff), .SDcols = 1:5]
}

bench <- microbenchmark(aPaulDF(), aPaulM(), simonDF(), simonM(), aDF(), aDT(), 
    times = 100)
bench
## Unit: milliseconds
##       expr   min    lq median     uq    max neval
##  aPaulDF() 345.8 427.3  498.8  590.2  819.3   100
##   aPaulM() 212.4 272.4  294.2  328.0  405.1   100
##  simonDF() 789.1 909.3  972.4 1058.9 1256.1   100
##   simonM() 675.8 754.8  791.5  856.9  952.0   100
##      aDF() 510.6 615.7  731.0  855.7 1452.3   100
##      aDT() 448.5 459.1  511.2  531.2  749.6   100

plt <- qplot(y = time, data = bench, colour = expr)
plt <- plt + scale_y_log10()
print(plt)

plot of chunk unnamed-chunk-1