gpt4 book ai didi

r - $R_LIBS_USER下如何快速复制/更新本地库?

转载 作者:行者123 更新时间:2023-12-03 23:51:39 25 4
gpt4 key购买 nike

假设

  • 我安装的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” .

    (IOW,我正在寻找一种类似于使用 Python 的 pip 安装程序的“卡住”选项所能做的功能,本质上,它产生了将来必须给安装程序以重现当前安装的输入。 )

    最佳答案

    您可以使用功能 installed.packages为此目的。即:

    installed.packages(lib.loc = "$HOME/my/R_lib/3.3.1")

    返回的对象包含大量信息(每个包 DESCRIPTION 文件中的大多数字段),但包的名称在第一列中。所以像下面这样的东西应该可以解决问题:
    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)

    要回答评论中的其他问题:

    如果您的旧库包含来自 CRAN 以外的其他来源的包,您将不得不根据 DESCRIPTION 的内容做一些练习。文件,因此将取决于包作者对其进行记录的程度。
    参数 fieldinstalled.packages允许您从这些文件中选择一些附加字段。确定包来源的相关字段是字段 Repository , URLMaintainer .以下是有关如何将它们分开的一些想法:

    CRAN 与非 CRAN:
    inst <- installed.packages(lib.loc = "$HOME/my/R_lib/3.3.1", 
    fields=c("URL","Repository","Maintainer"))
    inst <- as.data.frame(inst, row.names=NA, stringsAsFactors=FALSE)
    cran <- inst[inst$Repository%in%"CRAN",]
    non_cran <- inst[!inst$Repository%in%"CRAN" & !inst$Priority%in%"base",]

    生物导体包:
    bioc <- inst[grepl("Bioconductor",inst$Maintainer),]
    source("https://bioconductor.org/biocLite.R")
    biocLite(pkgs=bioc$Packages)

    Github 软件包:
    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]))
    }

    关于r - $R_LIBS_USER下如何快速复制/更新本地库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48588637/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com