using-staninside.R
‘Stan’ is a powerful language and using R (and specifically ‘rstan’) as glue to allow R users to easily interface existing models. Sometimes a user might wish to use a different backend (‘CmdStanR’) or examine and modify the written ‘Stan’ code directly. This package seeks to allow users the ability to:
If a package developer were to build a package with ‘staninside’, they first could create the package directory in the usual ways.
Next, to build the appropriate structure the author could call
This function will create the following directory tree:
.
├── inst
│ ├── stan
│ │ ├── base.stan
│ │ ├── data
│ │ ├── functions
│ │ ├── parameters
This provides the user with a structure to use when building their
‘Stan’ programs. For complicated programs, it is sometimes useful to
break up the ‘Stan’ code blocks into separate files stored in
sub-directories. These separate .stan
files can then be
accessed within the ‘Stan’ code with the following syntax:
Generally speaking, there will be some function in an R package that will fit the data to a model. In order to facilitate this fitting with a ‘CmdStanR’ backend, a process like that below could be used. Note that this model assumes that ‘cmdstanr’ is installed, though this could be replaced with other ways of calling ‘Stan’ (e.g., ‘rstan’).
fit_my_data <- function(my_data){
requireNamespace("mypackage")
local_location <- rappdirs::user_cache_dir(appname = "my_package")
if (length(list.files(local_location, pattern = ".stan")) > 1) {
cli::cli_alert_info("Using cached Stan models")
cli::cli_alert_info(
"Use `staninside::clear_stan_cache('mypackage')` if you need to refresh")
} else {
cli::cli_alert_info("Copying Stan models to cache")
staninside::copy_models(pkgname = "mypackage", local_location = local_location)
cli::cli_alert_success("Models copied!")
}
model_file_path <- file.path(local_location, paste0("base", ".stan"))
mod <- cmdstanr::cmdstan_model(model_file_path)
fit <- mod$sample(data = my_data)
return(fit)
}
You now can call fit_my_data
to fit your model. The
underlying ‘Stan’ code is stored in the user cache directory and will be
compiled on the first model fitting operation.