Summary
I am currently building a docker image with RStudio that is based on a previous version of R. When I installed R libraries in that image and tried to access those libraries with another, prebuilt docker image I received the following message:
library("dplyr")
Warning message:
package ´dplyr´ was built under R version 4.1.2
For some reason the R version I get and the R version I install are not the same. Is there some way to inspect the packages on https://cran.r-project.org/bin/linux/ubuntu/focal-cran40/? What is the reason for the discrepancy between my requested R version of 4.0.4 and the installed version of 4.1.2?
What I have tried
In my dockerfile I explicitly define my target version of 4.0.4.
RUN apt-get install -y r-base=4.0.4-1.2004.0 r-recommended=4.0.4-1.2004.0
When I verify my R Version it does show 4.1.2:
Rscript -e 'R.Version()$version.string'
[1] "R version 4.1.2 (2021-11-01)"
When I verify my R installation it shows that 4.0.4 is installed:
apt policy r-base
r-base:
Installed: 4.0.4-1.2004.0
Candidate: 4.1.2-1.2004.0
Version table:
4.1.2-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.1.1-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.1.0-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.5-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
*** 4.0.4-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
100 /var/lib/dpkg/status
4.0.3-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.2-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.1-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.0-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
3.6.3-2 500
500 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages
Steps to reproduce:
I start with a clean Ubuntu 20.04 image.
docker run -it --entrypoint bash ubuntu:focal
I make sure I am current and then add some packages.
apt-get update && apt-get upgrade -y
apt-get install -y --no-install-recommends software-properties-common dirmngr gdebi-core curl
tzdata wants some info during the installation (this can be anything I suspect):
1
1
Add the signing key for the r-project repos and add the repo. $(lsb_release -cs)
resolves to "focal".
curl https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc > /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
Check the available r-base package versions:
apt policy r-base
r-base:
Installed: (none)
Candidate: 4.1.3-1.2004.0
Version table:
4.1.3-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.1.2-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.1.1-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.1.0-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.5-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.4-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.3-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.2-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.1-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.0-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
3.6.3-2 500
500 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages
Install R:
apt-get install -y r-base=4.0.4-1.2004.0 r-recommended=4.0.4-1.2004.0
Check the installed Version:
Rscript -e 'R.Version()$version.string'
[1] "R version 4.1.3 (2022-03-10)"
What am I missing? Is it possible that there might be some issue with the r-rpoject repo?
Thanks for your inputs!
CodePudding user response:
As per my comment above, this seems confused.
You open up with "binary from the PPA are built under a more current version": yes, and that is a feature. If you do not want a current dplyr
(via a current r-cran-dplyr
) then do not add the PPA by Michael (which you do correctly by following the steps at the README.
The disconnect, if there is one, is that you seem to think that you point to that PPA and somehow get versions matching an arbitrarily picked R version, here your 4.0.4. You cannot, and we never say you can.
What we provide via the CRAN mirror of the other Rutter PPA are
- current versions of R for the various operating systems, i.e. Michael tweeted just yesterday that 4.0.3 is now available off my Debian binaries
- about 5000 additional binaries off CRAN for the LTS release but also generally built with most current R version---which is why the
dplyr
binary signalled it was built recently under 4.0.4
So in short this is not a time machine mechanism.
(For that you can look into the RSPM builds for which I have a container rocker/r-rspm:20.04
to use RSPM, you could try the date-indexing support they offer. I don't use enable that by default.)
If I misunderstood anything, please add a comment and maybe clarify above. The r-sig-debian list is also available for more follow-up.
Edit: Per the discussion in the comments, we now know better. OP constrained just one package from the set and expected that apt
would magically expand. That is not how it happens. Based on some other Dockerfile
I wrote, I recommend something along the lines of
&& apt-get install -t unstable -y --no-install-recommends \
# ... some omitted ...
r-base=${R_BASE_VERSION}-* \
r-base-dev=${R_BASE_VERSION}-* \
r-recommended=${R_BASE_VERSION}-* \
# ... more lines omitted ...
which is how I impose versions when I build the r-base
container. The versioned r-base-dev
will pull in the versioned r-base-core
container, you could also list it explicitly.
CodePudding user response:
As suggested by Dirk Eddelbuettel the issue lies with how I tried to install the packages.
r-base
and r-recommended
are meta-packages that contain further packages. Meta packages can be requested by version but do not propagate the requested version down to their child packages.
This means if you want to install a specific version of R
the binary is included in r-base-core
. The same goes for r-recommended
and the recommended R
base
packages which can be installed via apt into /usr/lib/R/library.
To install the specific version of R that is needed the following can be written to the Dockerfile
:
ARG R_INSTALL_VERSION="4.0.4-1.2004.0"
RUN apt-get install -y \
r-base-core=${R_INSTALL_VERSION} \
r-base-html=${R_INSTALL_VERSION} \
r-doc-html=${R_INSTALL_VERSION} \
r-base-dev=${R_INSTALL_VERSION}
Note that r-recommended
was excluded here since 11 out of 15 base
packages had dependency issues as described above.
If those packages are needed one can list the available versions of a package via apt policy <package-name>
and pick a version that is compatible with the requested R
version.
This package version does not correspond to the R
Version:
ARG R_INSTALL_VERSION="4.0.4-1.2004.0"
RUN apt-get install -y \
r-base-core=${R_INSTALL_VERSION} \
r-base-html=${R_INSTALL_VERSION} \
r-doc-html=${R_INSTALL_VERSION} \
r-base-dev=${R_INSTALL_VERSION} \
r-cran-cluster=2.1.1-1.2004.0 \
...