Option to Switch On/Off Fast Data Transformations
A significant speed up can be gained by using fast (panel) data transformation
functions from package collapse
.
By default, this speed up is not enabled.
Option plm.fast
can be used to enable/disable the speed up. The option is
evaluated prior to execution of supported transformations (see below), so
option("plm.fast" = TRUE)
enables the speed up while
option("plm.fast" = FALSE)
disables the speed up.
To have it always switched on, put options("plm.fast" = TRUE)
in your
.Rprofile file.
See Examples for how to use the option and for a benchmarking example.
By default, package plm
uses base R implementations and R-based code. The
package collapse
provides fast data transformation functions written
in C/C++, among them some especially suitable for panel data.
Having package collapse
installed is a requirement for the speed up.
However, this package is currently not a hard dependency for package plm
but a 'Suggests' dependency.
Currently, these functions benefit from the speed-up (more functions are under investigation):
between,
Between,
Sum,
Within.
## Not run: ### A benchmark plm without and with speed-up library("plm") library("collapse") library("microbenchmark") rm(list = ls()) data("wlddev", package = "collapse") form <- LIFEEX ~ PCGDP + GINI # produce big data set (taken from collapse's vignette) wlddevsmall <- get_vars(wlddev, c("iso3c","year","OECD","PCGDP","LIFEEX","GINI","ODA")) wlddevsmall$iso3c <- as.character(wlddevsmall$iso3c) data <- replicate(100, wlddevsmall, simplify = FALSE) rm(wlddevsmall) uniquify <- function(x, i) { x$iso3c <- paste0(x$iso3c, i) x } data <- unlist2d(Map(uniquify, data, as.list(1:100)), idcols = FALSE) data <- pdata.frame(data, index = c("iso3c", "year")) pdim(data) # Balanced Panel: n = 21600, T = 59, N = 1274400 // but many NAs # data <- na.omit(data) # pdim(data) # Unbalanced Panel: n = 13300, T = 1-31, N = 93900 options("plm.fast" = FALSE) # default: fast functions of 'collapse' not in use times <- 3 # no. of repetitions for benchmark - this takes quite long! bench_res_plm_baseR <- microbenchmark( plm(form, data = data, model = "within"), plm(form, data = data, model = "within", effect = "twoways"), plm(form, data = data, model = "random"), plm(form, data = data, model = "random", effect = "twoways"), times = times) options("plm.fast" = TRUE) bench_res_plm_collapse <- microbenchmark( plm(form, data = data, model = "within"), plm(form, data = data, model = "within", effect = "twoways"), plm(form, data = data, model = "random"), plm(form, data = data, model = "random", effect = "twoways"), times = times) print(bench_res_plm_baseR, unit = "s") print(bench_res_plm_collapse, unit = "s") ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.