Roman Lustrik shares how to fix package versions in Docker images:
Using package in R is easy. You install from CRAN using install.packages("packagename")
, it resolves dependencies and you’re good to go. What R natively doesn’t handle so well is installing a particular package version without jumping through hoops. Technically you need the source file of the package version you want to install AND all source files of the dependencies (in the correct version, of course). This has been made almost seamless with packages packrat
and recently, renv
.
This comes handy when you are constructing a Docker file to run in production. Usually you want to run this defensively and do not want things to change from one image build to another. To get there, you can save all your package names and version into a file (renv.lock
) and use that to reconstruct the now defined package structure with predictable versions (see renv vignette here).
This is quite useful as R package developers tend not to covet backwards compatibility, and one of the key benefits of containers is to have the option to keep the same code base and configuration in all environments.