如何在最新版的R 中迁移旧版本已安装的包
我现在使用的版本是R 4.5.2,正在安装最新版本的R 4.6.0。
如何将已在旧版本中安装的包迁移到新版本?以下是我的尝试:
我获取并保存了旧版本R 中已安装的包
pkg_current <- installed.packages() |>
as.data.frame() |>
dplyr::select(Package) |>
tibble::remove_rownames()
write.table(pkg_current, file = "packages.txt", sep = "\t",
row.names = T)
然后我在新版本的R 中运行以下代码,只从CRAN安装包,因为txt文件中也包含了一些来自Github的包。
data.path <- "C:/Users/Documents/"
pkg_current <- file.path(data.path, "packages.txt")
pkg_current <- read.table(pkg_current)
str(pkg_current)
install.packages(
pkg_current$Package,
dependencies = TRUE,
repos = c(CRAN = "https://cran.rstudio.com/"),
type = "source"
)
问题在于这些包(大约1500个)的安装过程要花好几小时——到现在为止已经8 小时,仍在继续统计中…… 有没有更快的方式?我在这里看到过一些类似的帖子,例如使用updateR() 函数,但我收到与“损坏的文件”相关的错误信息。
编辑:当我移除 type = "source" 时的输出:
There are binary versions available but the source versions are later:
binary source needs_compilation
crs 0.15-41 0.15-42 TRUE
rfm 0.3.0 0.4.0 FALSE
devtools 2.5.1 2.5.2 FALSE
enrichwith 0.4.0 0.5.0 FALSE
fabletools 0.6.1 0.7.0 FALSE
fect 2.2.0 2.4.1 TRUE
kardl 1.3.0 1.3.1 FALSE
roxygen2 7.3.3 8.0.0 TRUE
解决方案
这可能就是你想要的。
inst_pack <- function(x, lib = .libPaths()[1], ncpus = 1L){
utils::install.packages(
pkgs = x,
lib = lib,
repos = "https://cloud.r-project.org",
Ncpus = ncpus
)
}
## Default repo
local({r <- getOption("repos")
r["CRAN"] <- "https://cran.r-project.org"
options(repos=r)
})
#
inst_pkgs <- installed.packages(priority = "NA")
inst_pkgname <- inst_pkgs[, "Package"]
inst_version <- inst_pkgs[, "Version"] |> package_version()
#
avail_pkgs <- available.packages(repos = "https://cloud.r-project.org")
avail_pkgname <- avail_pkgs[, "Package"]
avail_version <- avail_pkgs[, "Version"] |> package_version()
i <- which(avail_pkgname %in% inst_pkgname)
j <- which(inst_pkgname %in% avail_pkgname)
sum(avail_version[i] > inst_version[j])
i_update <- which(avail_version[i] > inst_version[j])
ncores <- 1L
# with so many packages to update, it might be a good idea
# to use this instead of 'ncores <- 1L'
# ncores <- parallel::detectCores() - 2L
to_update <- avail_pkgname[i][i_update]
inst_pack(to_update, ncpus = ncores)
当我运行这个时,我得到了以下信息。
There are binary versions available but the source versions are later:
binary source needs_compilation
devtools 2.5.1 2.5.2 FALSE
fabletools 0.6.1 0.7.0 FALSE
roxygen2 7.3.3 8.0.0 TRUE
secretbase 1.2.1 1.2.2 TRUE
而且这些包的最新版本都是从源码安装的。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。