我最近使用安装程序包来更新我的 R 版本(从 3.6.2 到 4.0.0)。更新成功,我已确认使用print(R.version)
. 但是,尽管我严格按照这些步骤操作,但我的旧版本 R 的包还没有复制到新版本。我也尝试过运行copy.packages.between.libraries(ask = T)
将包复制过来。No packages to copy. Goodbye :)
尽管我无法加载以前安装在旧版本上的任何软件包,但两次都返回了。
问问题
744 次
2 回答
6
这是因为从 R 3.6.x 更新到 4.x 需要您重新安装所有软件包(请参阅新闻)。
我发现这样做的最好方法是:
- 获取您的旧包裹
old_packages <- installed.packages(lib.loc = "/home/johannes/R/x86_64-pc-linux-gnu-library/3.6/")
当然,您必须将路径更改为您的包所在的路径。只需使用.libPaths()
,如果您已经安装了新的 R 版本,请将其替换4.0
为3.6
.
根据已安装的软件包检查旧的:
new_packages <- installed.packages() missing_df <- as.data.frame(old_packages[ !old_packages[, "Package"] %in% new_packages[, "Package"], ])
安装缺少的软件包(使用多个内核来提高速度)
install.packages(missing_df$Package, Ncpus = 3)
我前段时间在我的博客上写了这篇文章,但这些是必不可少的步骤,你应该很高兴。
于 2021-03-26T13:22:52.823 回答
2
如果您查看源代码copy.packages.between.libraries
(只需F2
在鼠标指针位于函数名称上时键入),您会发现以下命令:
library(installr)
(installed_R_folders <- get.installed.R.folders())
#> 4.0.3 4.0.2
#> "C:/PROGRA~1/R/R-4.0.3" "C:/PROGRA~1/R/R-4.0.2"
(installed_R_folders_TABLE <- data.frame(R_version = names(installed_R_folders),
Folder = installed_R_folders))
#> R_version Folder
#> 4.0.3 4.0.3 C:/PROGRA~1/R/R-4.0.3
#> 4.0.2 4.0.2 C:/PROGRA~1/R/R-4.0.2
(from <- installed_R_folders[2])
#> 4.0.2
#> "C:/PROGRA~1/R/R-4.0.2"
(to <- installed_R_folders[1])
#> 4.0.3
#> "C:/PROGRA~1/R/R-4.0.3"
(from_library <- file.path(from, "library"))
#> [1] "C:/PROGRA~1/R/R-4.0.2/library"
(to_library <- file.path(to, "library"))
#> [1] "C:/PROGRA~1/R/R-4.0.3/library"
(packages_in_the_from_library <- list.files(from_library))
#> [1] "base" "boot" "class" "cluster" "codetools"
#> [6] "compiler" "datasets" "foreign" "graphics" "grDevices"
#> [11] "grid" "KernSmooth" "lattice" "MASS" "Matrix"
#> [16] "methods" "mgcv" "nlme" "nnet" "parallel"
#> [21] "rpart" "spatial" "splines" "stats" "stats4"
#> [26] "survival" "tcltk" "tools" "translations" "utils"
(packages_in_the_to_library <- list.files(to_library))
#> [1] "base" "boot" "class" "cluster" "codetools"
#> [6] "compiler" "datasets" "foreign" "graphics" "grDevices"
#> [11] "grid" "KernSmooth" "lattice" "MASS" "Matrix"
#> [16] "methods" "mgcv" "nlme" "nnet" "parallel"
#> [21] "rpart" "spatial" "splines" "stats" "stats4"
#> [26] "survival" "tcltk" "tools" "translations" "utils"
(packages_to_NOT_move <- unname(installed.packages(priority = "high")[,"Package"]))
#> [1] "codetools" "base" "boot" "class" "cluster"
#> [6] "codetools" "compiler" "datasets" "foreign" "graphics"
#> [11] "grDevices" "grid" "KernSmooth" "lattice" "MASS"
#> [16] "Matrix" "methods" "mgcv" "nlme" "nnet"
#> [21] "parallel" "rpart" "spatial" "splines" "stats"
#> [26] "stats4" "survival" "tcltk" "tools" "utils"
(packages_to_NOT_move <- c(packages_to_NOT_move, packages_in_the_to_library))
#> [1] "codetools" "base" "boot" "class" "cluster"
#> [6] "codetools" "compiler" "datasets" "foreign" "graphics"
#> [11] "grDevices" "grid" "KernSmooth" "lattice" "MASS"
#> [16] "Matrix" "methods" "mgcv" "nlme" "nnet"
#> [21] "parallel" "rpart" "spatial" "splines" "stats"
#> [26] "stats4" "survival" "tcltk" "tools" "utils"
#> [31] "base" "boot" "class" "cluster" "codetools"
#> [36] "compiler" "datasets" "foreign" "graphics" "grDevices"
#> [41] "grid" "KernSmooth" "lattice" "MASS" "Matrix"
#> [46] "methods" "mgcv" "nlme" "nnet" "parallel"
#> [51] "rpart" "spatial" "splines" "stats" "stats4"
#> [56] "survival" "tcltk" "tools" "translations" "utils"
(ss_packages_to_NOT_move_from <- packages_in_the_from_library %in%
packages_to_NOT_move)
#> [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
(ss_packages_to_YES_move_from <- !ss_packages_to_NOT_move_from)
#> [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#> [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#> [25] FALSE FALSE FALSE FALSE FALSE FALSE
(packages_to_YES_move_from <- packages_in_the_from_library[ss_packages_to_YES_move_from])
#> character(0)
得出的结论是,不同 R 安装的软件包之间没有区别,并导致:
没有要复制的包。再见 :)
但是,如果您查看.libPaths()
,您会发现get.installed.R.folders
缺少您在自己用户的库中安装的软件包:
.libPaths()
[1] "C:/Users/User/Documents/R/win-library/4.0"
[2] "C:/Program Files/R/R-4.0.3/library"
因此,默认行为installr
是缺少您在 R 安装后安装的所有软件包:
packages <- as.data.frame(utils::installed.packages())
head(packages[is.na(packages$Priority),c("Package","LibPath")])
arrow arrow C:/Users/User/Documents/R/win-library/4.0
arules arules C:/Users/User/Documents/R/win-library/4.0
arulesViz arulesViz C:/User/User/Documents/R/win-library/4.0
ash ash C:/Users/User/Documents/R/win-library/4.0
askpass askpass C:/Users/User/Documents/R/win-library/4.0
assertive assertive C:/Users/User/Documents/R/win-library/4.0
...
于 2021-03-27T00:24:43.360 回答