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

nei*_*fws 41 dependencies r package

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

Depends: bar
Run Code Online (Sandbox Code Playgroud)

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

R CMD INSTALL foo_1.0.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

ERROR: dependency ‘bar’ is not available for package ‘foo’
Run Code Online (Sandbox Code Playgroud)

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

Spa*_*man 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.
Run Code Online (Sandbox Code Playgroud)

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


iga*_*rav 17

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

install_deps(pkg =".",dependencies = logical,threads = getOption("Ncpus",1))

参数:
pkg:包描述,可以是路径或包名.有关详细信息,请参阅'as.package'

依赖关系:'logical'表示还安装了这个'pkg'依赖于/链接到/建议的未安装的软件包.请参阅'install.packages'的参数'dependencies'.

threads:用于安装依赖项的并发线程数.如果未设置,它默认为选项'"Ncpus"'或'1'.

例子:

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

  • 这在包含您要安装的软件包的目录上起作用,但与`.tar.gz`文件不兼容。实际上,在实际安装.tar.gz文件本身之前,您无法将路径.tar.gz文件传递到install_deps以便安装依赖项。 (3认同)

Jon*_* Le 6

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

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

R包是“ forecast”,我使用的云镜像是http://cran.us.r-project.org。如果要使用其他镜像,则它们都是:https : //cran.r-project.org/mirrors.html

上面的内容对我来说很有效,可以将R包放入AWS EMR引导Shell脚本中。


小智 6

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

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


sha*_*ron 5

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

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