title | format | toc | keep-md | date-modified | author | keywords | ||||
---|---|---|---|---|---|---|---|---|---|---|
Awesome R Package Development Tools |
gfm |
true |
true |
2023-06-04 |
Indrajeet Patil |
|
A curated list of awesome tools to assist
:::{.callout-tip}
What is included?
- Only tools helpful for package development are included, and not other resources (e.g. books).
- All relevant tools are included, irrespective of their availability on CRAN/Bioconductor.
- Tools which are part of publicly archived/retired GitHub repositories are not included. :::
If you wish to suggest any additional tools, please make a PR or create an issue here.
Code of Conduct
Please note that the awesome-r-pkgtools
project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
๐
Swiss army knives Tools useful across all stages of package development (some of these are meta-packages and their component packages are also included in respective sections for the sake of completeness), irrespective of whether the package is meant to be submitted to CRAN or Bioconductor.
๐
Package templates Generic
-
{pkgkitten}
(useful for creating new packages for R) -
{rcompendium}
(to make the creation of R package/research compendium easier) -
{r.pkg.template}
(an opinionated R package template with CI/CD built-in) -
{skeletor}
(An R Package Skeleton Generator)
RMarkdown-based
-
{fusen}
(to build a package from RMarkdown files) -
{litr}
(to write a complete R package in a single R markdown document)
Shiny
-
{golem}
(framework for building shiny applications) -
{leprechaun}
(leaner framework for building shiny applications) -
{rhino}
(a framework to build high quality, enterprise-grade Shiny apps at speed)
Meta-packages
-
{pkgverse}
(for package meta-verse) -
{metamakr}
(for package meta-verse)
๐งธ
Naming things -
{available}
(to check if a package name is available to use) -
{collidr}
(to check for namespace collisions) -
{changer}
(to change the name of an existing R package)
Working with package components
-
{rprojroot}
(accessing files w.r.t. package root directory) -
{desc}
(manipulatingDESCRIPTION
files) -
{withr}
(to manage package side effects by safely and temporarily modifying global states) -
{pkgload}
(to simulate the process of installing and loading a package) -
{pkgbuild}
(to find tools needed to build packages)
Package configuration
{config}
(to manage environment specific configuration values)
Package management tools
{pkgcache}
(to cache 'CRAN'-like metadata and packages)
๐
Documentation Manual
-
{roxygen2}
(to generate R package documentation from inline R comments) -
{Rd2roxygen}
(in case you inherit a project where documentation was not written using{roxygen2}
) -
{sinew}
(generate{roxygen2}
skeletons) -
{roclang}
(helpers for diffusing content across function documentation) -
{Rdpack}
(for inserting references, figures, and evaluated examples in Rd docs) -
{roxygen2md}
(to allow Markdown syntax usage in{roxygen2}
documentation) -
{rd2markdown}
(to convert.Rd
package documentation files into markdown files) -
{rd2list}
(converts Rd docs to a human-readable list) -
{pasteAsComment}
(RStudio addin for pasting copied code as roxygen comment) -
roxygen2Comment
(Rstudio addin for adding and remove{roxygen2}
comment)
Math rendering in HTML/PDF manual
-
{katex}
(to convert latex math expressions to HTML for use in package manual pages) -
{mathjaxr}
(provides 'MathJax' and macros to enable its use withinRd
files for rendering equations in the HTML help files) -
{mathml}
(translates R expressions to 'MathML' or 'MathJax' so that they can be rendered in HTML manual and Shiny apps)
Vignettes
-
{knitr}
(a general-purpose tool for dynamic report generation to be used as a vignette builder for R package vignettes) -
{rmarkdown}
(to convert R Markdown documents to a variety of formats) -
{RmdConcord}
(to provide support for concordances in R Markdown files) -
{quarto}
(provides R interface to frequently used operations in the Quarto CLI) -
{prettydoc}
(creates lightweight yet pretty vignettes) -
{learnr}
(to turn any R Markdown document into an interactive tutorial)
Website
-
{pkgdown}
(static website for package documentation) -
{gitdown}
(software changes as a gitbook) -
{altdoc}
(usedocute
,docsify
, orMkDocs
to create a static website for package documentation)
Translation
{potools}
(for translating messages and checking the "health" of the messaging corpus)
Lifecycle
{lifecycle}
(to manage the life cycle of exported functions)
Badges and stickers
-
{badger}
(to query information and generate badges for use inREADME
) -
{hexSticker}
(helper functions for creating reproducible hexagon sticker purely in R) -
{hexFinder}
(to scavenge the web for possible hex logos for packages) -
hexwall
(to create a wall of hexstickers)
Presentation
{xaringan}
(an RMarkdown output format forremark.js
slides)
Book
{bookdown}
(authoring framework for books and technical documents with R Markdown)
Change log and versioning
-
{fledge}
(to streamline the process of updating change logs and versioning R packages developed in git repositories) -
{newsmd}
(utilities to add updates to theNEWS.md
file) -
{autonewsmd}
(to auto-generate change log using conventional commits)
โ๏ธ
Documentation quality -
{docreview}
(to check quality of docs) -
{spelling}
(to check for spelling mistakes) -
{gramr}
(for grammar suggestions)
๐งช
Unit testing General
-
{testthat}
(a testing framework for R that is easy to learn and use; also provides snapshot testing) -
{patrick}
(for parameterized unit testing with{testthat}
) -
{tinytest}
(zero-dependency unit testing framework that installs tests with the package) -
{tinysnapshot}
(snapshots for unit tests using the{tinytest}
framework) -
{RUnit}
(a standard unit testing framework, with additional code inspection and report generation tools) -
{testit}
(a simple package for testing R packages) -
{realtest}
(a framework unit testing that distinguishes between expected, acceptable, current, fallback, ideal, or regressive behaviours) -
{roxytest}
(inline{testthat}
tests with{roxygen2}
) -
{roxut}
(to write the unit tests in the same file as the function) -
{exampletestr}
(tests based on package examples) -
{unitizer}
(simplifies regression tests by comparing objects produced by test code with earlier versions of those same objects) -
{r-hedgehog}
(property based testing) -
{autotest}
(automatic mutation testing of R packages)
Markdown documents
Shiny applications
-
{shinytest}
(testing Shiny apps) -
{shinytest2}
(testing Shiny apps using a headless Chromium web browser) -
{shinyloadtest}
(to load test deployed Shiny apps)
Web/database applications
-
{httptest}
(a test environment for HTTP requests in R) -
{httptest2}
(the same for{httr2}
package) -
{webfakes}
(provides fake web apps for HTTP testing R packages) -
{dittodb}
(makes testing against databases easy)
Visual regression testing
-
{vdiffr}
(for visual regression testing with{testthat}
) -
{gdiff}
(for performing graphical difference different package or R versions)
Mock testing
-
{mockthat}
(provides a way to mock package function for unit testing, while coping withS3
dispatch) -
{mockr}
(provides a way to mock package function for unit testing) -
{mockery}
(provides a way to mock package function for unit testing and can be used with any testing framework)
Helpers for testing frameworks
-
{testthis}
(RStudio addins for working with files that contain tests) -
{xpectr}
(builds unit tests with the{testthat}
package by providing tools for generating expectations) -
{testdown}
(turn{testthat}
results into a{bookdown}
project) -
{ttdo}
(provides 'diff'-style comparison of R objects for{tinytest}
framework)
๐งฝ
Code/Document Formatting -
{styler}
(to format code according to a style guide) -
{stylermd}
(to format text in Markdown documents) -
{formatR}
(to format R source code) -
{RFormatter}
(extension of{formatR}
with slightly improved heuristics) -
{grkstyle}
(extension package for{styler}
that supports author's personal code style preferences) -
{codegrip}
(addin for RStudio IDE to reshape R code and navigate across syntactic constructs) -
{BiocStyle}
(provides standard formatting styles for Bioconductor PDF and HTML documents) -
AlignAssign
(RStudio addin that aligns the assignment operators within a highlighted area) -
{snakecase}
(helpful for having consistent case while naming objects in the package) -
{dotInternals}
(to distinguish non-exported package functions by prepending their names with a dot)
๐ โฑ
Code analysis General
-
{codetools}
(code analysis tools for R) -
{goodpractice}
(Swiss army knife for good practices) -
{inteRgrate}
(provides an opinionated set of rules for R package development) -
{pkgcheck}
(checks if package follows good practices recommended for packages in therOpenSci
ecosystem) -
{pkgstats} (a static code analysis tool)
-
{rchk}
(provides several bug-finding tools that look for memory protection errors in C source code using R API) -
{sourcetools}
(tools for reading, tokenizing, and parsing R code) -
{precommit}
(git hooks for common tasks like formatting files, spell checking, etc.)
Code review
{PaRe}
(reviews other packages during code review by looking at their dependencies, code style, code complexity, and how internally defined functions interact with one another)
Code coverage
-
{covr}
(to compute code coverage) -
{covrpage}
(to include summaryREADME
of code coverage and more detailed information about tests) -
{covtracer}
(provides tools for contextualizing tests)
Lint detection
-
{lintr}
(static code analysis) -
{checkglobals}
(to check R-packages for globals and imports) -
{CodeDepends}
(analysis of R code for reproducible research and code view) -
{adaptalint}
(infer code style from one package and use it to check another) -
{roger}
(provides tools for grading the coding style and documentation of R scripts) -
{cleanr}
(tests code for some of the most common code layout flaws)
Code complexity
{cyclocomp}
(to index the complexity of a function)
Code similarity
-
{dupree}
(identifies code blocks that have a high level of similarity within a set of R files) -
{rscc}
(provides source code similarity evaluation by variable/function names) -
{SimilaR}
(quantifies the similarity of the code-base of R functions by means of program dependence graphs)
Compiled code
-
{memtools}
(to solve memory leaks) -
{cppcheckR}
(to checkC
andC++
code usingCppcheck
)
JavaScript code
Lines of code
{cloc}
(counts blank lines, comment lines, and physical lines of source code in source files)
Refactoring
{refactor}
(to check speed and performance of both the original and refactored version of code)
โฑ๏ธ
Code performance Benchmarking
-
{bench}
(provides high precision benchmarks for R expressions) -
{microbenchmark}
(provides infrastructure to accurately measure and compare the execution time of R expressions) -
{tictoc}
(provides functions for timing R scripts) -
{touchstone}
(benchmarking pull requests)
Profiling
-
{profvis}
(to profile and visualize profiling data) -
{proffer}
(to create friendlier, faster visualizations for profiling data) -
{jointprof}
(to profile packages with native code in C, C++, Fortran, etc.)
โ๏ธ
Dependency Management -
{pkgdepends}
(to find recursive dependencies of from various sources) -
{deepdep}
(to visualize and explore package dependencies) -
{itdepends}
(to assess usage, measure weights, visualize proportions, and assist removal of dependencies) -
{DependenciesGraphs}
(to visualize package dependencies) -
{DependencyReviewer}
(to investigate packages during code review by looking at their dependencies) -
{deps}
(to manage source code dependencies by decorating R code with roxygen-style comments) -
{pkgnet}
(to build a graph representation of a package and its dependencies) -
{functiondepends}
(to find functions in an unstructured directory and explore their dependencies) -
{pkgndep}
(checks the heaviness of the packages used) -
{oysteR}
(to secure package against insecure dependencies) -
{attachment}
(to deal with package dependencies during package development)
๐ฌ
CRAN/Bioconductor checks, submission, and status -
{rcmdcheck}
(to runR CMD check
form R programmatically) -
{BiocCheck}
(to run Bioconductor-specific package checks) -
{rhub}
(to runR CMD check
on CRAN architectures) -
{checkhelper}
(to help avoid problems with CRAN submissions) -
{foghorn}
(to check for results and submission portal status) -
{urlchecker}
(to checks for URL rot)
๐
Usage -
{cranlogs}
(for computing CRAN download counts) -
{packageRank}
(for visualizing CRAN download counts) -
{dlstats}
(provides download statistics for packages)
๐
CI/CD CI/CD: continuous integration and either continuous delivery or continuous deployment
-
actions
(provides GitHub Actions relevant for R) -
actions-sync
(to manage GitHub Actions workflows across repositories) -
rworkflows
(GitHub Actions to automates testing, documentation website building, and containerised deployment) -
r-appveyor
(for AppVeyor) -
{tic}
(for Circle CI and GitHub Actions) -
{jenkins}
(for Jenkins CI) -
{cronR}
(to schedule R scripts/processes with the cron scheduler)
๐ฎ
Security/Privacy -
{digest}
(for the creation of hash digests of arbitrary R objects) -
{hash}
(implements a data structure similar to hashes in Perl and dictionaries in Python but with a purposefully R flavor) -
{gpg}
(GNU privacy guard for R)
Build systems
{fakemake}
(to mock Unix Make build system in case it is unavailable)
Validation frameworks
{valtools}
(in clinical research and drug development)
๐ญ
Debugging -
{debugme}
(provides helpers to specify debug messages as special string constants, and control debugging of packages via environment variables) -
{debugr}
(tools to print out the value of R objects/expressions while running an R script) -
{winch}
(provides stack traces for call chains that cross between R and C/C++ function calls) -
{flow}
(to visualize as flow diagrams the logic of functions, expressions, or scripts, which can ease debugging) -
{boomer}
(provides debugging tools to inspect the intermediate steps of a call)
๐ฌ
Input validation -
{checkmate}
(fast and versatile argument checks) -
{assertthat}
(to declare the pre and post conditions that you code should satisfy and to produce friendly error messages) -
{assertive}
(provides readable check functions to ensure code integrity) -
{pkgcond}
(better error messages for package users) -
{dreamerr}
(a simple and intuitive, yet powerful and flexible, way to check the arguments passed to a function and to offer informative error messages) -
{erify}
(to check arguments and generate readable error messages) -
{validate}
(to check whether data lives up to expectations based on the domain-specific knowledge)
๐จ
Package metadata -
{codemetar}
(provides utilities to generate, parse, and modifycodemeta.jsonld
files automatically for R packages), or{codemeta}
(a leaner version of{codemetar}
) -
{cffr}
(provides utilities to generate, parse, modify and validateCITATION.cff
files automatically for R packages) -
{citation}
(createsCITATION.cff
from R package metadata) -
{pkgapi}
(to create the map of function calls in a package) -
{packagemetrics}
(for comparing among packages) -
{devtoolbox}
(to create a summary report for R package and to extract dependency statistics in a tidy data frame) -
{pkgattrs}
(useful for getting information on the contents of any R package) -
{foreman}
(for unpacking, interrogating and subsetting R packages) -
{sessioninfo}
(to include R session information)
๐ก โฐ๏ธ
Reverse dependency checks -
{revdepcheck}
(for automated, isolated, reverse dependency checking) -
{xfun}
(specifically,xfun::rev_check()
)
๐ ๐
Gratitude To thank the contributors or maintainers of packages you rely on.
-
{thankr}
(to find out who maintains the packages you are using) -
{allcontributors}
(to help acknowledge all contributions)
๐
Docker container -
{containerit}
(to package R script/session/workspace and all dependencies as aDocker
container by generating a suitableDockerfile
) -
{usethat}
(to automate analytic project setup tasks)
๐
Integration with other languages C++
Fortran
Python
Rust
.NET Framework
JavaScript/HTML/CSS
Julia
๐งน
Upkeep {TODOr}
(RStudio addin to list things that you need to do or change)
๐
Sundry -
{gpttools}
(RStudio addin that allows using chatGPT to automate writing documentation, tests, etc.) -
{prefixer}
(prefix function with their namespace ) -
{options}
(provides simple mechanisms for defining and interpreting package options) -
{rstudioapi}
(to conditionally access the RStudio API from CRAN packages) -
{rcheology}
(to access data on base packages for previous versions of R) -
{gitignore}
(to fetch gitignore templates) -
{DIZutils}
(helpers for packages dealing with database connections)
Session information
::: {.cell}
:::
::: {.cell details.summary='Quarto version'}
Quarto version
[1] '1.4.122'
:::
::: {.cell details.summary='Session details'}
Session details
โ Session info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
setting value
version R version 4.3.0 (2023-04-21)
os Ubuntu 22.04.2 LTS
system x86_64, linux-gnu
ui X11
language (EN)
collate C.UTF-8
ctype C.UTF-8
tz UTC
date 2023-06-04
pandoc 3.1.1 @ /usr/bin/ (via rmarkdown)
โ Packages โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
package * version date (UTC) lib source
cli 3.6.1 2023-03-23 [1] RSPM
clipr 0.8.0 2022-02-22 [1] RSPM
desc 1.4.2 2022-09-08 [1] RSPM
details * 0.3.0 2022-03-27 [1] RSPM
digest 0.6.31 2022-12-11 [1] RSPM
evaluate 0.21 2023-05-05 [1] RSPM
fastmap 1.1.1 2023-02-24 [1] RSPM
htmltools 0.5.5 2023-03-23 [1] RSPM
httr 1.4.6 2023-05-08 [1] RSPM
jsonlite 1.8.4 2022-12-06 [1] RSPM
knitr 1.43 2023-05-25 [1] RSPM
later 1.3.1 2023-05-02 [1] RSPM
magrittr 2.0.3 2022-03-30 [1] RSPM
png 0.1-8 2022-11-29 [1] RSPM
processx 3.8.1 2023-04-18 [1] RSPM
ps 1.7.5 2023-04-18 [1] RSPM
quarto 1.2.0.9000 2023-05-21 [1] Github (quarto-dev/quarto-r@a4b4f93)
R6 2.5.1 2021-08-19 [1] RSPM
Rcpp 1.0.10 2023-01-22 [1] RSPM
rlang 1.1.1 2023-04-28 [1] RSPM
rmarkdown 2.22 2023-06-01 [1] RSPM
rprojroot 2.0.3 2022-04-02 [1] RSPM
rstudioapi 0.14 2022-08-22 [1] RSPM
sessioninfo 1.2.2 2021-12-06 [1] any (@1.2.2)
withr 2.5.0 2022-03-03 [1] RSPM
xfun 0.39 2023-04-20 [1] RSPM
xml2 1.3.4 2023-04-27 [1] RSPM
yaml 2.3.7 2023-01-23 [1] RSPM
[1] /home/runner/work/_temp/Library
[2] /opt/R/4.3.0/lib/R/site-library
[3] /opt/R/4.3.0/lib/R/library
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
:::