One of the participants in Open Source Development Course uses R for her research work. So we decided that in one of the meetings we'll try to explore how to set up local development environment for one of the R-based packages using Docker.

Disclaimer: none of the participants had any experience in contributing to open source projects in R so we might have totally misunderstood how one should set up an environment.

First we looked for a project to play with. Checked the r projects, then looked at the awesome-R list and found r-yaml. We thought a library dealing with YAML files will be simple to install and test.

One thing we noticed quite quickly is the the compile target was missing from the Makefile. That's however is a minor issue in the documentation.

Then we spent quite a lot of time figuring out why things are failing. After about an hour of failures we felt it would be better to open an issue. Within a few minutes, maybe half an hour we got a response that solved the problem.

So here is how one could create a local development environment in a Docker container:

Clone the repo

git clone git@github.com:vubiostat/r-yaml.git
cd r-yaml

Start Docker container

Start a Docker container using an image based on R version 4.2.3 that was listed on Docker Hub.

Give the container a name "r-yaml" to make it easy to reuse it.

Designate the internal /opt folder as the workdir.

Map the current working directory to the internal /opt

I have not tried it, but I think MS Windows users will have to replace the -v$(pwd):/opt part by -v %cd%:/opt if using cmd or by -v ${PWD}:/opt if using PowerShell.

Run bash in the container.

docker run -it --name r-yaml --workdir /opt -v$(pwd):/opt r-base:4.2.3 bash

Install RUnit

Inside the container install the R dependency.

Rscript -e 'install.packages("RUnit")'

Install the external dependencies

apt-get update
apt-get install -y texlive-latex-base texlive-fonts-extra texlive-latex-recommended texlive-fonts-recommended

Run the tests

make check
make test

Exit from the container

exit

This will also stop the container.

Restart the container

We can restart the stopped container:

docker container start -i r-yaml

Remove the container

If we don't need the container any more we can remove it (after we exited and it was stopped).

docker rm r-yaml

Clean the environment

sudo git clean -dxf

This will print:

Removing build/

Conclusion

I hope this description will help someone else setting up the environment. I'll also suggest to include this, or something similar in the README file of the project.

This certainly helped me and next time it will be easier to set up a development environment for an R-based project.