The excellent Metrics package provides a function to calculate average precision: apk
.
The problem is, it's based on a for
loop, and it's slow:
require('Metrics')
require('rbenchmark')
actual <- 1:20000
predicted <- c(1:20, 200:600, 900:1522, 14000:32955)
benchmark(replications=10,
apk(5000, actual, predicted),
columns= c("test", "replications", "elapsed", "relative"))
test replications elapsed relative
1 apk(5000, actual, predicted) 10 53.68 1
I'm at a loss as to how to vectorize this function, but I was wondering if perhaps there's a better way to implement this in R.