A framework which provides users a set of useful primitive elements for specifying individual based simulation models, with special attention models for infectious disease epidemiology. Users build models by specifying variables for each characteristic of individuals in the simulated population by using data structures exposed by the package. The package provides efficient methods for finding subsets of individuals based on these variables, or cohorts. Cohorts can then be targeted for variable updates or scheduled for events. Variable updates queued during a time step are executed at the end of a discrete time step, and the code places no restrictions on how individuals are allowed to interact. These data structures are designed to provide an intuitive way for users to turn their conceptual model of a system into executable code, which is fast and memory efficient.

An R package for specifying and simulating individual-based models.
This package is designed to:
The package can be installed from github using the "remotes" library
library('remotes')
install_github('mrc-ide/individual')
Alternatively you can install individual directly from CRAN, but be aware that the CRAN version may not be the most recent version of the package:
install.packages("individual")
For development it is most convenient to run the code from source. You can install the dependencies in RStudio by opening the project and selecting "Build" > "Install and Restart"
Command line users can execute:
library('remotes')
install_deps('.', dependencies = TRUE)
Docker users can build a minimal image with
docker build . -f docker/Dockerfile -t [your image name]
Or if you would like devtools and documentation tools you can run
docker build . -f docker/Dockerfile.dev -t [your image name]
We recommend first reading vignette("Tutorial") which describes
how to simulate a simple SIR model in "individual", and later vignette("API")
which describes in detail how to use the data structures in "individual" to
build more complicated models. If you are running into performance issues,
learn more about how to speed up your model in vignette("Performance").
Individual-based models are important tools for infectious disease epidemiology, but practical use requires an implementation that is both comprehensible so that code may be maintained and adapted, and fast. "individual" is an R package which provides users a set of primitive classes using the R6 class system that define elements common to many tasks in infectious disease modeling. Using R6 classes helps ensure that methods invoked on objects are appropriate for that object type, aiding in testing and maintenance of models programmed using "individual". Computation is carried out in C++ using Rcpp to link to R, helping achieve good performance for even complex models.
"individual" provides a unique method to specify individual-based models compared to other agent/individual-based modeling libraries, where users specify a type for agents, which are subsequently stored in an array or other data structure. In "individual", users instead instantiate a object for each variable which describes some aspect of state, using the appropriate R6 class. Finding subsets of individuals with particular combinations of state variables for further computation can be efficiently accomplished with set operations, using a custom bitset class implemented in C++. Additionally, the software makes no assumptions on the types of models that may be simulated (e.g. mass action, network), and updates are performed on a discrete time step.
We hope our software is useful to infectious disease modellers, ecologists, and others who are interested in individual-based modeling in R.
Thank you! Please refer to the vignette on vignette("Contributing") for info on how to
contribute :)