使用“R CMD INSTALL”安装R软件包时如何安装依赖项?

时间:2011-08-02 06:12:54

标签: r dependencies package

我正在开发我的第一个R包(使用R 2.13,Ubuntu 10.10)。我们称之为 foo ,让我们说R /目录中的代码以行库(bar)开头,其中 bar 是现有的在CRAN中的包, foo 所依赖的包。我的DESCRIPTION文件包含以下行:

Depends: bar

当包 foo 准备好进行测试时,我会使用以下方式在本地安装

R CMD INSTALL foo_1.0.tar.gz

但是,如果未安装 bar ,我会看到:

ERROR: dependency ‘bar’ is not available for package ‘foo’

显然,如果我的 foo 是使用install.packages()从CRAN安装的,那么 bar 将同时安装。所以我的问题是:当我使用R CMD INSTALL安装我的软件包 foo 时,如果需要,如何确保安装CRAN软件包 bar ?这是配置脚本的工作吗?

7 个答案:

答案 0 :(得分:17)

实际上,重新阅读R扩展指南,并不是说R CMD INSTALL会从CRAN获得依赖关系。 R中的install.packages()方法会这样做,但乍一看我不认为R CMD INSTALL会这样做。

你可以使用install.packages从.tar.gz安装,但你必须设置repos = NULL,然后这适用:

 dependencies: logical indicating to also install uninstalled packages
          on which these packages depend/suggest/import (and so on
          recursively).  Not used if repos = NULL.

我怀疑要做的是从DESCRIPTION文件中获取依赖项,然后运行R并在那些在干净环境中测试构建时执行install.packages()。

答案 1 :(得分:17)

幸运的是Devtools提供了一个简单的解决方案:install_deps()

  

install_deps(pkg =“。”,dependencies = logical,threads = getOption(“Ncpus”,1))

     

参数:
  pkg:包描述,可以是路径或包名。看到             'as.package'了解更多信息

     

依赖项:'logical'表示同时安装已卸载的软件包             这个'pkg'取决于/链接到/建议。见参数             'install.packages'的'依赖关系'。

     

threads:用于安装的并发线程数             依赖。如果是,则默认为选项'“Ncpus”'或'1'             未设置。

示例:

install_deps(".")  
install_deps("/path/to/package",dependencies="logical")

答案 2 :(得分:5)

我最后只使用bash here-document并指定了云镜像来查找依赖项:

sudo R --vanilla <<EOF
install.packages('forecast', repos='http://cran.us.r-project.org')
q()
EOF

R包是“预测”,我使用的云镜是http://cran.us.r-project.org。如果你想使用另一面镜子,这里都是:https://cran.r-project.org/mirrors.html

上面的内容对我来说是将R包装入AWS EMR bootstrap shell脚本。

答案 3 :(得分:4)

更新;到 2021 年 2 月,remotes 包可以解决问题,并且比 devtools 的占用空间小得多:

R -e "install.packages('remotes')"
R -e "remotes::install_local('/path/to/mypackage.tar.gz', dependencies=T)"

答案 4 :(得分:2)

与@Jonathan Le类似,但更适合脚本使用:

sudo R --vanilla -e 'install.packages("forecast", repos="http://cran.us.r-project.org")'

答案 5 :(得分:0)

执行此操作的机制是在depends文件的DESCRIPTION字段中添加条目。

Depends: bar

这将加载bar库(如果已安装),否则将从CRAN安装。

Writing R extensions手册的第1.1.1节中描述了这一点:http://cran.r-project.org/doc/manuals/R-exts.html#The-DESCRIPTION-file

答案 6 :(得分:0)

遵循Romain Rossi的想法,这是一个简单的shell脚本,它以您发送的方式安装每个参数(假设它是一个包):

#!/bin/sh 
for f in $* 
    do 
    sudo R --vanilla -e "install.packages('"$f"', repos='http://cran.us.r-project.org')" 
done