My Commitment to Open Source

Everything I have learnt about coding has come from open source projects and code. To give back to the community, all my personal code (i.e. not commissioned under contract) is released under open source licences (usually MIT), and can be found through my GitHub. I am also an active member of Stack Overflow.
Follow me on Twitter to keep up to date on all package updates and developments.

R Packages


mlr3proba is a machine learning toolkit for making probabilistic predictions within the mlr3 ecosystem. Key features of mlr3proba are 1) A unified fit/predict model interface to any probabilistic predictive model (frequentist, Bayesian, or other); 2) Pipeline/model composition; 3) Task reduction strategies; 4) Domain-agnostic evaluation workflows using task specific algorithmic performance measures.

CRAN   Github   Website  

distr6 is an R6 object-oriented distributions package, which implements a unified interface for 42 probability distributions and 11 kernels. The long-term plan is to include all the probability distributions implemented in R. As well as giving access to pdf/cdf/quantile/rand functions for distributions, distr6 also includes querying distributions for mathematical and statistical properties, such as mean and variance. For users more interested in modelling and estimation, decorators can extend usage to more complex functions including analytical expressions for p-norms and anti-derivatives. Using wrappers, composite distributions can be created including mixtures and products. Design patterns, including wrappers and decorators, are based on Gamma et al. (1994).


Currently interacting with mathematical sets in R is limited to the sets package, which treats sets as basic data structures but critically not as objects. set6 upgrades this package using R6, and treats sets and intervals as objects that can be queried and manipulated. set6 includes functionality for customisable sets, tuples, fuzzy sets, intervals, and a whole host of other features.


R62S3 contains three helper functions that automatically generate S3 methods, S4 methods, or functions, from R6 public methods. The main use-case for R62S3 is for building a fully R6 object-oriented interface, whilst including familiar S3 dispatch, but without hundreds of lines of code to generate each method.