-
Notifications
You must be signed in to change notification settings - Fork 7
Updating R on Linux
-
NB - if on Windows, use Tal Galili's
installr
(upgrade R from within R!) -
you may want to save a list (as text file) from the vector of
installed.packages()
before updating
store_packages.R
:
tmp.pkg.list <- installed.packages()
installedpackages <- as.vector(tmp.pkg.list[is.na(tmp.pkg.list[,"Priority"]), 1]) save(installedpackages, file="~/Downloads/installed_packages.rda")
* If you forget to do this you can still do it later with the `lib.loc` parameter to `installed.packages()`. It's also better to use the `lib.loc` parameter as you can specify only those packages that are tied to the version of R.
* `.libPaths()` shows the version-specific path: for me it is `~/R/x86_64-pc-linux-gnu-library/3.*`. Using just the most recent one (since I was working fine without those in pre-3.2 versions), replace the line above with:
```R
tmp.pkg.list <- installed.packages(lib.loc = "~/R/x86_64-pc-linux-gnu-library/3.2")
```
- - -
* `sudo vim /etc/apt/sources.list`
* Add `deb https://mirrors.ebi.ac.uk/CRAN/bin/linux/ubuntu trusty/`
* `deb `___`MIRROR_URL`___`/bin/linux/ubuntu `___`LINUX_CODENAME`___`/`
↳ __`MIRROR_URL`__ : `https://mirrors.ebi.ac.uk/CRAN/` — via [list of mirrors here](https://cran.r-project.org/mirrors.html)
↳ __`LINUX_CODENAME`__ : `trusty` — via `cat /etc/*-release`
* `sudo apt-get update`
- - -
### Problem: GPG key has expired (R's Secure APT)
* https://mirrors.ebi.ac.uk/CRAN gave:
GPG error: https://mirrors.ebi.ac.uk trusty/ Release: The following signatures were invalid: KEYEXPIRED 1445181253 KEYEXPIRED 1445181253 KEYEXPIRED 1445181253
...switched to https://www.stats.bris.ac.uk/R/ - same there
* switched off HTTPS using http://mirrors.ebi.ac.uk/CRAN/ and problem persisted
### Solution: add new key [given here](https://cran.r-project.org/bin/linux/ubuntu/README.html#secure-apt)
* [Via notes at CRAN on _Secure APT_](https://cran.r-project.org/bin/linux/ubuntu/README.html#secure-apt) via [this ServerFault question](http://serverfault.com/questions/730316/error-when-running-apt-get-update-on-ubuntu-14)
* run `sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys `___`GPG_KEY`___
↳ __`GPG_KEY`__ : currently `E084DAB9` (June 2016, apparently changed mid-Oct '15)
↳ `sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9`
- - -
* `sudo apt-get install r-base`
> Users who need to compile R packages from source [e.g. package maintainers, or anyone installing packages with install.packages()] should also install the r-base-dev package:
> ```
sudo apt-get install r-base-dev
- (Followed the system hint to run
sudo apt-get update
again after this step)
~ $ R
R version 3.3.0 (2016-05-03) -- "Supposedly Educational"
Upgrade complete 😎
You could reinstall all packages in the new version of R using this trick
store_packages.R
:
# store_packages.R
#
# stores a list of your currently installed packages
tmp.pkg.list <- installed.packages() # I'd advise using the lib.loc parameter, see note above
installedpackages <- as.vector(tmp.pkg.list[is.na(tmp.pkg.list[,"Priority"]), 1])
save(installedpackages, file="~/Downloads/installed_packages.rda")
restore_packages.R
:
# restore_packages.R
#
# installs each package from the stored list of packages
load("~/Downloads/installed_packages.rda") # optional if you've already upgraded R
for (count in 1:length(installedpackages)) install.packages(installedpackages[count])
...however this duplication is potentially wasteful of space over time. Instead you could move your packages to a new path which will persist across further upgrades, as recommended here
Here, I'm using ~/opt/R/libs/
as my new personal package library
new.lib.path <- path.expand("~/opt/R/libs/")
.libPaths(new.lib.path)
To retain this setting, edit the Rprofile.site
in the R installation's /etc/
directory.
- find (or confirm) the
/etc/
location withwhereis R
-
ls -l /etc/R/Rprofile.site -rw-r--r-- 1 root root 807 Dec 11 2014 /etc/R/Rprofile.site
* `sudo vim /etc/R/Rprofile.site` and add the `.libPaths` line above [as appropriate]
## Finishing the job
This batch install may fail for some along the way, but you'll probably have trouble seeing which in the huge logs, so a second run is useful:
```R
load("~/Downloads/installed_packages.rda")
for (count in 1:length(installedpackages)) {
each.pkg <- installedpackages[count]
if (! each.pkg %in% installed.packages()) {
install.packages(each.pkg)
}
}
- I had trouble with the
png
package, notes here
The install.packages
loop should give some warnings and tell you to run warnings()
to see them, along the lines of package packagename
is not available (for R version ..*).
These will be in the list if you're a biologist, otherwise ignore this section.
> source("https://bioconductor.org/biocLite.R")
Bioconductor version 3.0 (BiocInstaller 1.16.5), ?biocLite for help
BiocInstaller version 3.0 is too old for R version 3.3.0;
...
A new version of Bioconductor is available after installing the most recent
version of R; see http://bioconductor.org/install
You may have to run sudo R
if BiocInstaller
is in a root access area, e.g. for me /usr/local/lib/R/site-library/
, found via shell command:
function findafile (){ find / -iname "$@" 2>/dev/null; }
findafile BiocInstaller
If installations appear, but these locations are not found by running the R function .libPaths()
, then no need to remove them.
# remove.packages("BiocInstaller") didn't work as it looked in the default library for me
remove.packages("BiocInstaller", lib="/usr/local/lib/R/site-library/")
source("http://bioconductor.org/biocLite.R")
biocLite()