【问题标题】:Install only those R packages not already installed (inc. cran and github): any built-in way?只安装那些尚未安装的 R 包(包括 cran 和 github):任何内置方式?
【发布时间】:2021-04-04 01:13:20
【问题描述】:

我希望简化我的代码库,并使用下面的解决方案来安装尚未安装的软件包,但我想我会通过询问是否有一些官方方法来仔细检查我没有重新发明轮子做同样的事情,我不知何故错过了。谢谢!

#' Installs any packages not already installed
#' @examples
#' \dontrun{
#' install_if_missing(c('tidyverse','github.com/stan-dev/cmdstanr'))
#' }
install_if_missing = function(pkgs){
    missing_pkgs = NULL
    
    for(this_pkg in pkgs){
        path = NULL
        try(
            path <- find.package(basename(this_pkg),quiet=T,verbose=F)
            , silent = T
        )
        if(length(path)==0){
            missing_pkgs = c(missing_pkgs,this_pkg)
        }else{
            message('Found ',this_pkg,' @ "',path,'"')
        }
    }
    cran_missing = missing_pkgs[!grepl('github.com/',fixed=T,missing_pkgs)]
    if(length(cran_missing)>0){
        message('The following required but uninstalled CRAN packages will now be installed:\n',paste(cran_missing,collapse='\n'))
        install.packages(cran_missing)
    }
    github_missing = missing_pkgs[grepl('github.com/',fixed=T,missing_pkgs)]
    github_missing = gsub('github.com/','',github_missing)
    if(length(github_missing)>0){
        message('The following required but uninstalled Github packages will now be installed:\n',paste(this_pkg,collapse='\n'))
        remotes::install_github(github_missing)
    }
    invisible()
}

【问题讨论】:

    标签: r installation package


    【解决方案1】:

    我不知道有什么基本函数可以做你想做的事,所以你需要自己写。问题中的一些cmets:

    帮助页面?installed.packages

    不要使用它来确定是否安装了命名包(使用 find.package 或 system.file)

    因为如果你安装了很多包,它会很慢。

    它也不会检测包可以更新的情况;在某些情况下,旧版本的包 A 会阻止您安装包 B。

    您的测试 grep('github',missing_pkgs) 将给 CRAN 包 githubinstallarchivist.github(以及任何未来在其名称中包含“github”的包)提供不好的结果。您可能想测试其他内容。

    【讨论】:

    • 谢谢!我更新了函数以反映您的建议。
    猜你喜欢
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多