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 stanside, 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 faciliate this fitting with a CmdStanR backend, a process like that below could be used.
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 `intervalcalc::clear_cache` if you need to refresh")
} else {
cli::cli_alert_info("Copying Stan models to cache")
staninside::copy_models(this_pkg())
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)
}