Writing Frictionless R Package Wrappers — Introduction
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
The R language and RStudio IDE are a powerful combination for “getting stuff done”, and one aspect of R itself that makes it especially useful is the ability to use it with other programming languages via a robust foreign language interface capability1. The term “foreign language” refers to another programming language such as C, C++, Fortran, Java, Python, Rust, etc. A common way of referring the this idiom of using functionality written in another programming language from directly within R is “wrapping” since we’re putting an R “shell” around the code from the other language. Another term you may see used is “extending” (hence the title of the “Writing R Extensions” R manual).
While R supports using this this extension mechanism from any R script leaving tiny trails of R and other language source and binary files all across your filesystem is not exactly the best way to keep these components organized and creates other challenges when you come across the need to use them in other projects or share them with others. Thankfully, the R Core team, along with many individual contributors over the years, has made it pretty straightforward to incorporate this extension capability into R packages which are much easier (honest!) to organize and share.
The goal of this blog series — which will have a {bookdown} companion along with some screencasts — is to help you get up to speed using R and RStudio to write R packages that wrap code from many different languages to help you “get stuff done” with as little friction as possible.
Base Requirements
It is assumed that readers are familiar with the R programming language, RStudio IDE, and are comfortable installing and using packages. Since this work is about extending R with other programming languages, you should also have some knowledge of one or more of the target languages being covered.
To follow along with the series you’ll need to ensure you have the necessary components installed along the way. Rather than overwhelm you with all of them up front, each new section will introduce requirements specific to the language or situation being covered. However, there are some fundamentals you’ll need to ensure are available.
- An R2 environment, preferably R 3.6.x which is what was used for this series.
- RStudio3, as we’ll be using many of the features provided in it to help reduce development friction
- The {pkgbuild}4 package installed
Once you’ve gotten through those steps, you should fire up RStudio and run:
pkgbuild::check_build_tools(debug = TRUE)
which will help you make sure your particular system is ready to build packages.
After performing the build tool check and/or installation of the necessary core tools, you will then need to install the {devtools}5 package, which will help ensure that the remaining core packages required are installed.
We’re also going to use the git
6 source code version control system. The git
ecosystem is not “GitHub”, which is just a public (or, potentially somewhat private) place to house source code repositories, just like other hosted services such as Bitbucket, GitLab, or SourceHut. You can use the excellent “Happy Git with R”7 resource to help ensure you’re source code control environment is also ready to use.
Supplemental References
It may be helpful to create a browser bookmark folder for supplemental reference material that will be referred to from time-to-time across the sections (we’ll be adding to this list in each chapter, too):
- Writing R Extensions (https://cran.r-project.org/doc/manuals/r-release/R-exts.html)
- Advanced R (http://adv-r.had.co.nz/)
- R Packaged (http://r-pkgs.had.co.nz/)
Up Next
If you’ve been a user of “development versions” of R packages or have authored R packages you likely made quick work of this first installment. Those new to creating packages with R, those who tend to only use fully-baked CRAN versions of R packages, and/or those who have not worked with git
before likely had to do quite a bit of work to get down to this point (if this describes you, you definitely deserve both a break and kudos for getting this far!).
In the next installment we’ll make sure the package building infrastructure is ready to roll by creating a basic R package that we’ll use as a building block for future work.
- “Writing R Extensions”; Chapter 5, “System and foreign language interfaces”; (https://cran.r-project.org/doc/manuals/r-release/R-exts.html#System-and-foreign-language-interfaces) ↩
- R Project Home (https://www.r-project.org/) ↩
- RStudio Home (http://rstudio.com/) ↩
- {pkgbuild} CRAN page (https://cran.rstudio.com/web/packages/pkgbuild/) ↩
- {devtools} Home (https://devtools.r-lib.org/) ↩
-
git
Home (https://git-scm.com/) ↩ - Happy Git with R (https://happygitwithr.com/) ↩
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.