distributions3
, inspired by the eponynmous Julia package, provides a generic function interface to probability distributions. distributions3
has two goals:
Replace the
rnorm()
,pnorm()
, etc, family of functions with S3 methods for distribution objectsBe extremely well documented and friendly for students in intro stat classes.
The main generics are:

random()
: Draw samples from a distribution. 
pdf()
: Evaluate the probability density (or mass) at a point. 
cdf()
: Evaluate the cumulative probability up to a point. 
quantile()
: Determine the quantile for a given probability. Inverse ofcdf()
.
Installation
You can install distributions3
with:
install.packages("distributions3")
You can install the development version with:
install.packages("devtools")
devtools::install_github("alexpghayes/distributions3")
Basic Usage
The basic usage of distributions3
looks like:
library("distributions3")
X < Bernoulli(0.1)
random(X, 10)
#> [1] 0 0 0 0 0 1 0 0 0 0
pdf(X, 1)
#> [1] 0.1
cdf(X, 0)
#> [1] 0.9
quantile(X, 0.5)
#> [1] 0
Note that quantile()
always returns lower tail probabilities. If you aren’t sure what this means, please read the last several paragraphs of vignette("onesamplezconfidenceinterval")
and have a gander at the plot.
Contributing
If you are interested in contributing to distributions3
, please reach out on Github! We are happy to review PRs contributing bug fixes.
Please note that distributions3
is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
Related work
For a comprehensive overview of the many packages providing various distribution related functionality see the CRAN Task View.

distributional
provides distribution objects as vectorized S3 objects 
distr6
builds ondistr
, but uses R6 objects 
distr
is quite similar todistributions
, but uses S4 objects and is less focused on documentation. 
fitdistrplus
provides extensive functionality for fitting various distributions but does not treat distributions themselves as objects