How to update all packages for a new R version quickly and easily?
Don't know if this is quick and easy, but I think the pacman
package can be useful.
- Under the previous version, use
pacman::p_lib()
to return a vector of your installed packages, and save them onto disk usesaveRDS()
.
For instance,
mypks <- pacman::p_lib()
saveRDS(mypks, "~/mypks.rds")
Update R.
Import the vector from step 1 using
readRDS()
and runinstall.packages()
with the object.
For instance,
mypks <- readRDS("~/mypks.rds")
install.packages(mypks)
Painless way to install a new version of R?
Just for completeness, there are some ways to prevent you from having this problem. As Dirk said, save your packages in another directory on your computer.
install.packages("thepackage",lib="/path/to/directory/with/libraries")
You can change the default .Library
value using the function .libPaths
too
.libPaths("/path/to/directory/with/libraries")
This will put this path as a first value in the .Library
variable, and will make it the default.
If you want to automate this further, you can specify this in the Rprofile.site file, which you find in the /etc/ directory of your R build. Then it will load automatically every time R loads, and you don't have to worry about that any more. You can just install and load packages from the specified directory.
Finally, I have some small code included in my Rprofile.site allowing me to reinstall all packages when I install a new R version. You just have to list them up before you update to the new R version. I do that using an .RData file containing an updated list with all packages.
library(utils)
## Check necessary packages
load("G:\Setinfo\R\packagelist.RData") # includes a vector "pkgs"
installed <- pkgs %in% installed.packages()[, 'Package']
if (length(pkgs[!installed]) >=1){
install.packages(pkgs[!installed])
}
I make the packagelist.RData by specifying .Last()
in my Rprofile.site. This updates the package list if I installed some :
.Last <- function(){
pkgs <- installed.packages()[,1]
if (length(pkgs) > length(installed)){
save(pkgs,file="G:\Setinfo\R\packagelist.RData")
}
}
When I install a new R version, I just add the necessary elements to the Rprofile.site file and all packages are reinstalled. I have to adjust the Rprofile.site anyway (using sum contrasts, adding the extra code for Tinn-R, these things), so it's not really extra work. It just takes extra time installing all packages anew.
This last bit is equivalent to what is given in the original question as a solution. I just don't need to worry about getting the "installed" list first.
Again, this doesn't work flawless if you have packages that are not installed from CRAN. But this code is easily extendible to include those ones too.
Related Topics
Ggplot Aes_String Does Not Work Inside a Function
How to Combine Row and Column Layout in Flexdashboard
Put Multiple Data Frames into List (Smart Way)
How to Build a Dendrogram from a Directory Tree
Any Way to Pause at Specific Frames/Time Points with Transition_Reveal in Gganimate
Writing Functions VS. Line-By-Line Interpretation in an R Workflow
Update Multiple Data.Table Columns Elegantly
How to Plot a Histogram of a Long-Tailed Data Using R
Calculating Length of 95%-Ci Using Dplyr
How to Dynamically Wrap Facet Label Using Ggplot2
Recode Categorical Factor with N Categories into N Binary Columns