Other packages
Alternatives to ‘broadcast’
At the time of writing, the only alternative to the ‘broadcast’ package with respect to having a large range of support for broadcasting, is using an package that allows access to an external library from another programming language that does support ‘broadcasting’.
For example: Using the ‘reticulate’ package to access ‘Python’, and via that connection accessing the ‘Numpy’ module, which supports (and perhaps even had the first implementation) of broadcasting.
Another example is the ‘xtensor’ package (and extensiosn to that package, like ‘rray’), that allows - users to access the ‘C++’ module of the same name.
These alternatives all need access to a different programming language, which brings with it a host of problems:
- Dependency hell: Every dependency that is added to a software package increases the likelihood of something breaking (AKA “dependency hell”).
- Wasteful translations: Using libraries from other languages, such as ‘xtensor’ (‘C++’) or ‘Numpy’ (‘Python’) means that - at some point - one needs to convert between the structure of to that of the other language, and vice-versa, which wastes precious time, memory, and power.
- Inconsistent behaviour: Using libraries from other languages also means one cannot always guarantee consistent behaviour for some operations.
For example: both ‘Numpy’ and ‘xtensor’ have only limited support for missing values, whereas supports missing values for both atomic and recursive array/vector types (except type of ‘Raw’).
Since the ‘broadcast’ package does not rely on any external library, other than linking to ‘Rcpp’, ‘broadcast’ avoids all of the above issues.
Complimentary packages
The ‘broadcast’ fits well with the squarebrackets package, though that package is currently experimental, at the time of writing.
The tinyverse
The ‘broadcast’ package adheres to the ‘tinyverse’ philosophy (not to be confused with the ‘tidyverse’), which is the programming philosophy to primarily minimize dependencies, and secondarily to keep code efficient.
Other packages that share this philosophy include, but are not limited to, the following:
the core fastverse packages: ‘data.table’, ‘collapse’, and ‘kit’.
stringi, the primary package for string processing.
tinytable, for flexible table creation.
tinyplot, for plotting graphs; much faster than, for example, ‘ggplot2’, and with zero dependencies.
tinytest, for unit testing. Unlike ‘testthat’, ‘tinytest’ has zero dependencies.
tinycodet, for functions to help in coding etiquette.
matrixStats, for computing across rows or columns of matrices.
and many others.