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")
我最终只使用了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)
更新; 截至 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)