【问题标题】:R - equivalent of pip freeze (how to install all R dependencies from a file listing packages names and versions)R - 相当于 pip freeze(如何从列出包名称和版本的文件中安装所有 R 依赖项)
【发布时间】:2016-08-08 20:43:54
【问题描述】:

我正在进行一个新项目,其中包含大量依赖项的 R 代码,以及特定版本的 R (3.1.1)。当他们最初编写代码时,他们使用 R 的install.package('the-package') 下载最新版本,但是现在许多依赖项都有新版本,这使得它们与使用的 R 版本不兼容(某些软件包的最新版本,例如 dplyr、rcpp需要 R 升级,这是不可能的)

从这个经验来看,R 似乎拥有最糟糕的包管理器——我来自 NPM,您可以在其中指定每个包和所需包的特定版本。手动解决这些依赖关系是一个巨大的痛苦(持续 5 多个小时),因为显然默认行为是始终下载任何包的前沿。到目前为止,我已经相对成功了,单击包的 CRAN 页面上的“旧资源”链接,下载 tars 然后从它们安装..但这似乎是很多不必要的痛苦。我有一个团队成员关注this guide 以获取我需要的所有依赖项和版本的列表(这至少让我有可能预先安装所有软件包,然后继续试错,而不是解决每次在我的新环境中构建失败时,都会有 50 多个依赖项).. 但是没有“R,处理我的依赖项文件”命令。

  • Javascript - 你使用 NPM 从 package.json 安装。
  • Python - 你可以使用 pip freezepip install pip_freeze.txt,同样的概念
  • R - 据我所知,如果您像我一样有特定需求,没有简单的方法可以准确下载您需要的内容

这是一个外壳脚本,可以轻松修改以下载特定版本的包

#!/bin/bash
# CRAN doesn't have a version of this installable in our old R.
wget -P /tmp https://cran.r-project.org/src/contrib/Archive/Rcpp/Rcpp_0.12.5.tar.gz || { echo 'wget failed'; exit 1; }
Rscript -e "install.packages('/tmp/Rcpp_0.12.5.tar.gz', repos = NULL, type='source')" 2>&1 | tee -a rPkgInstall.log
 if egrep "non-zero exit status|Error in install.packages|^package .* is not available" rPkgInstall.log; then
    echo 'FAILED';
    exit 1;
fi

我怎样才能让下一个加入团队的人更轻松地完成这个过程?文档可以走很长的路,但我正在寻找的是 R 中的功能包管理器......或者允许我在 R 中做与 NPM install (from a package.json) 相同的约定

【问题讨论】:

  • 去检查检查点包。它将允许您穿越到 2014 年底开始的特定日期,并在 CRAN 上获取当时版本的所有包。

标签: r package-managers


【解决方案1】:

有一个相同的python包:https://github.com/chinmayshah99/r_freeze。 用法:

pip install r_freeze

打印包名:

r_freeze .

用于创建需求文件:

r_freeze -o req.txt .

用于将需求创建为 R 脚本:

r_freeze -o req.R .

覆盖需求文件:

r_freeze -o req.R --overwrite .

PS。我写这个包是因为当我自己不得不从一个巨大的项目中生成这些需求时,我对 R 不存在这样的服务感到沮丧。

【讨论】:

    【解决方案2】:

    packrat 包应该适用于您的用例。如果您使用的是 RStudio,我建议您使用他们内置在 UI 中的 Packrat 工具,但您也可以在 RStudio 之外使用它。来自Packrat walkthrough

    ## Install the package from CRAN
    install.packages("packrat")
    
    ## Initialize packrat
    packrat::init("~/path/to/your/project")
    
    ## Later on, install some package
    ## It will be installed in ~/path/to/your/project/packrat/lib
    install.packages("reshape2")
    
    ## Take a snapshot of installed packages
    packrat::snapshot()
    

    我可能只是描述了手动过程的一半。我只在 RStudio 中使用过自动模式。我在启动一个项目后安装了它,它查看了我的代码,设法提取了所有必要的包(不确定版本,因为我总是处于最前沿),保存源文件,并将它们安装在我的项目中目录。然后我可以将 packrat 目录移动到另一台机器上并让它安装所有的包。

    【讨论】:

      【解决方案3】:

      我想这应该可以解决你的问题

      pkgLoad <- function( packages = "favourites" ) {
        
        if( length( packages ) == 1L && packages == "favourites" ) {
          packages <- c( "data.table", "chron", "plyr", "dplyr", "shiny",
                         "shinyjs", "parallel", "devtools", "doMC", "utils",
                         "stats", "microbenchmark", "ggplot2", "readxl",
                         "feather", "googlesheets", "readr", "DT", "knitr",
                         "rmarkdown", "Rcpp"
          )
        }
        
        packagecheck <- match( packages, utils::installed.packages()[,1] )
        
        packagestoinstall <- packages[ is.na( packagecheck ) ]
        
        if( length( packagestoinstall ) > 0L ) {
          utils::install.packages( packagestoinstall,
                                   repos = "http://cran.csiro.au"
          )
        } else {
          print( "All requested packages already installed" )
        }
        
        for( package in packages ) {
          suppressPackageStartupMessages(
            library( package, character.only = TRUE, quietly = TRUE )
          )
        }
        
      }
      
      ## call the function
      pkgLoad()
      

      【讨论】:

        【解决方案4】:

        正如this page 中所建议的那样,您可以使用给定日期的库快照(例如 Microsoft 从 2014 年开始存储它们),即通过,例如repos='https://cran.microsoft.com/snapshot/2016-08-06/'install.packagesdevtools::install

        【讨论】:

          猜你喜欢
          • 2011-08-19
          • 2013-01-16
          • 1970-01-01
          • 2021-08-05
          • 2011-09-14
          • 2019-01-17
          • 1970-01-01
          • 2012-06-04
          相关资源
          最近更新 更多