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)