如何在$R_LIBS_用户下快速复制/更新本地库?

如何在$R_LIBS_用户下快速复制/更新本地库?,r,R,假设 我安装的R版本是3.3.1 我的环境变量$R_LIBS_USER设置为$HOME/my/R_lib/%V;及 我有一个目录$HOME/my/R_lib/3.3.1,其中包含大量随时间推移而安装的软件包 现在我想把我的R版本升级到3.4.1,比如说 我正在寻找一种方便的方法,在新目录$HOME/my/R_-lib/3.4.1下安装新的软件包集合,这是我目前在$HOME/my/R_-lib/3.3.1下拥有的库的“3.4.1版本” (依我看,我正在寻找一种类似于Python的pip安装程序的“

假设

  • 我安装的R版本是3.3.1
  • 我的环境变量
    $R_LIBS_USER
    设置为
    $HOME/my/R_lib/%V
    ;及
  • 我有一个目录
    $HOME/my/R_lib/3.3.1
    ,其中包含大量随时间推移而安装的软件包
  • 现在我想把我的R版本升级到3.4.1,比如说

    我正在寻找一种方便的方法,在新目录
    $HOME/my/R_-lib/3.4.1
    下安装新的软件包集合,这是我目前在
    $HOME/my/R_-lib/3.3.1
    下拥有的库的“3.4.1版本”


    (依我看,我正在寻找一种类似于Python的
    pip
    安装程序的“冻结”选项的功能,本质上,它会产生将来必须给安装程序的输入,以复制当前的安装。)

    您可以使用function
    installed.packages
    。即:

    installed.packages(lib.loc = "$HOME/my/R_lib/3.3.1")
    
    返回的对象包含大量信息(每个包
    说明
    文件中的大多数字段),但包的名称位于第一列。因此,类似于以下内容的内容应该可以起到作用:

    inst <- installed.packages(lib.loc = "$HOME/my/R_lib/3.3.1")
    install.packages(inst[,1], lib="$HOME/my/R_lib/3.4.1", dependencies=FALSE)
    
    生物导体封装:

    bioc <- inst[grepl("Bioconductor",inst$Maintainer),]
    source("https://bioconductor.org/biocLite.R")
    biocLite(pkgs=bioc$Packages)
    
    git <- non_cran[grepl("github", non_cran$URL),]
    install.packages("devtools")
    library(devtools)
    for(i in seq(nrow(git))){
        install_github(repo=gsub("http://github.com/","",git$URL[i]))
    }
    

    bioc我想您可以先将3.3.1目录复制到3.4.1,然后运行
    update.packages()
    Maybe?除了其他优秀的答案之外,我个人的想法是将@plannapus answer中的
    install.packages
    替换为
    p\u load
    from
    pacman
    ,因为它在语法、自动检查已安装/可用版本等方面具有各种优点,等等,关于bioconductor或GitHub软件包,等等?thc确实,我还没有想到这些,我会尽快添加一些东西,以抓住这些。
    git <- non_cran[grepl("github", non_cran$URL),]
    install.packages("devtools")
    library(devtools)
    for(i in seq(nrow(git))){
        install_github(repo=gsub("http://github.com/","",git$URL[i]))
    }