[R] 4.5.0: Do NOT just copy library folder and update.packages()

peter dalgaard pd@|gd @end|ng |rom gm@||@com
Sat Apr 26 09:38:19 CEST 2025


Yes. I was a little more careful about filtering out base and recommended packages, but the former won't be on CRAN anyway and will just give off a warning. 

The recommended packages sometimes do get upgraded on CRAN and whether you want those or the ones from the R release is a bit up in the air. (You might find one of those packages being aggressively updated shortly after release as their code freeze is lifted along with that of R.) 

You might add priority="NA" to installed.packages to solve that. Also, you might automate the version fixup for lib_loc, like:

old_lib <- sub("4.5", "4.4", .libPaths(), fixed=TRUE)

You probably could automate things even further, but my gut feeling is that you'd prefer to see the intermediate steps. It seems to get a little sticky to keep track of platform differences and historical changes in naming conventions. 

-pd

> On 26 Apr 2025, at 04.48, Matthew McCormack <mccormack using molbio.mgh.harvard.edu> wrote:
> 
> How about this:
> 
> lib_loc <- "/home/R/x86_64-pc-linux-gnu-library/4.4"
> to_install <- unname(installed.packages(lib.loc = lib_loc)[, "Package"])
> to_install
> install.packages(pkgs = to_install)
> 
>      Copy the names of the packages, then install them in the new 
> version of R.
> 
> Matthew
> 
> On 4/25/25 12:16 PM, Peter Dalgaard via R-help wrote:External Email - 
> Use Caution
>> A couple of people have gotten themselves in trouble by copying the contents of their 4.4 library folder into the 4.5 counterpart and running update.packages().
>> 
>> That can be a really bad idea if the old library contains base packages like "tools" or "utils". They don't live on CRAN, so update.packages() just leaves them at the 4.4.x version.
>> 
>> For instance,tools::md5sum has a new bytes= argument in 4.5.0 which gets used when loading other packages, but that cannot work anymore.
>> 
>> So copying library folders was probably never a good idea, but this time it is a very, very bad idea.
>> 
>> To avoid the problem, you can do something like this:
>> 
>>> .libPaths()
>> [1] "/Library/Frameworks/R.framework/Versions/4.5-x86_64/Resources/library"
>>> tbl <- installed.packages("/Library/Frameworks/R.framework/Versions/4.4-x86_64/Resources/library")
>>> table(tbl[,"Priority"])
>>        base recommended
>>          14          15
>>> pkglist <- rownames(tbl[is.na(tbl[,"Priority"]),])
>> and then install.packages(pkglist) avoids touching the base/recommended ones.
>> 
>> - pd
>> 
>> PS: On MacOS, I have two systems upgraded 4.4.x to 4.5.0. One of them has tools in the 4.4 library and the other does not. I have no clue what the difference might be....
>> 
> The information in this e-mail is intended only for th...{{dropped:31}}



More information about the R-help mailing list