The goal of predictr is to allow for model predictions which minimize memory usage and computing time. This package provides a new type of object and adaptors for various common model types.
You can install predictr from github with:
# install.packages("devtools")
devtools::install_github("craiggrabowski/predictr")
This is a basic example which illustrates predictor(), the main method defined in this package:
## basic example code
v <- seq(1024)
df <- data.frame(x = v, y = v + 1)
model <- lm(y ~ x, df)
x <- predictor(model)
predict(x, data.frame(x = c(2, 3)))
#> [,1]
#> [1,] 3
#> [2,] 4
We create a model object using linear regression and then convert to a new object using predictor(). This new object implements the predict() method, but its implementation does not produce the same results as the original regression object. In particular, the output is now expressed as a matrix instead of a numeric vector.
The new object created by predictor() has a few advantages over the object produced using a call to lm(). First, the new object is significantly smaller than the existing model object:
pryr::object_size(model)
#> 134 kB
pryr::object_size(x)
#> 1.61 kB
Second, the predict() method is now faster for large data:
a <- data.frame(x = seq(100000))
microbenchmark::microbenchmark(predict(model, a), predict(x, a))
#> Unit: milliseconds
#> expr min lq mean median uq
#> predict(model, a) 18.875002 22.784032 33.809279 24.919282 27.280293
#> predict(x, a) 1.639926 1.915395 3.067028 2.165641 2.440346
#> max neval
#> 90.07108 100
#> 50.03843 100
Third, the new object supports a conversion to a function using as.function(). This return value of this converion is a function which implements predict() as well, only now the compute time is much smaller:
f <- as.function(x)
microbenchmark::microbenchmark(predict(x, a), f(a))
#> Unit: microseconds
#> expr min lq mean median uq max
#> predict(x, a) 1631.693 1664.351 1924.7329 1724.274 2135.965 3426.342
#> f(a) 185.949 208.481 390.2227 216.476 311.847 2296.787
#> neval
#> 100
#> 100
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.