未从Additional_repositories安装R包依赖项

时间:2015-04-02 18:18:43

标签: r package packages

我正在开发一个需要另一个包OpenMx的命名空间的包。此程序包仅可从其自己的存储库中获取,但在Additional_repositories字段中指定此存储库不起作用。在尝试构建没有安装OpenMx的软件包时,我得到:

错误:依赖' OpenMx'不适用于等等等等。

我的描述有问题,还是我需要做的其他事情?

我的描述文件的相关部分:

Depends: R (>= 3.0.0)
Imports:  MASS, OpenMx (>= 2.0)
Additional_repositories: http://openmx.psyc.virginia.edu/OpenMx2/
LazyData: Yes
VignetteBuilder: knitr
Suggests: knitr

从构建尝试中记录:

Thu Apr  2 18:08:10 2015: Building tarball for package ctsem (SVN revision 5)
using R version 3.1.3 Patched (2015-03-16 r67994) ...

* checking for file ‘ctsem/DESCRIPTION’ ... OK
* preparing ‘ctsem’:
* checking DESCRIPTION meta-information ... OK
* installing the package to build vignettes
      -----------------------------------
* installing *source* package ‘ctsem’ ...
** R
** data
*** moving datasets to lazyload DB
** inst
** preparing package for lazy loading
Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) : 
  there is no package called ‘OpenMx’
ERROR: lazy loading failed for package ‘ctsem’
* removing ‘/tmp/RtmpAHPlFq/Rinst5272759a2048/ctsem’
      -----------------------------------
ERROR: package installation failed
Run time: 1.09 seconds.

3 个答案:

答案 0 :(得分:3)

AFAIK Additional_repositories仍然是一个自由格式字段,不会自动添加到由options("repos")咨询的download.packages(),因此install.packages()update.packages()

对于在CRAN之外添加 repos 的问题,我编写了一个小帮助程序包drat,其中包括一些人(包括我自己)用于在GitHub上托管回购(#&# 34;默认"模式,因为它很容易通过gh-pages)或任何其他http访问服务器 - 即公司或工作组内的本地服务器。 Drat并没有什么特别困难的,但是对于添加用户存储库的默认情况,比如openmx,您只需要drat::addRepo("openmx"),其余部分是从默认值推断出来的(假定为drat帐户openmx中的repo存在)。

我部署了两个用例:通过GitHub上的repos更新的包和一个工作本地仓库。

编辑:但是WRE说

  

' Addiitonal存储库' field是逗号分隔的列表   存储库URL,其他字段中指定的包可能是   找到。它目前被' R CMD检查'检查一下   可以找到包,至少作为源包(可以是   安装在任何平台上。)

这意味着它看起来像那里。奇。并且回购在给定的URL看起来是合法的。

编辑2:我在上面的引文中输入了一个补丁给R Core。

答案 1 :(得分:2)

请参阅:http://thecoatlessprofessor.com/programming/r-data-packages-in-external-data-repositories-using-the-additional_repositories-field/

具体来说,请注意您可以指定:

if (!requireNamespace("namepackage", quietly = TRUE)) {
  install.packages("namepackage", repos = "http://location-of.com/repo")
}

要在程序包加载时自动添加repo,请使用:

.onLoad <- function(libname) {
  repos = getOption("repos")
  repos["<NAME_REPO>"] = "http://location-of.com/repo"
  options(repos = repos)
  invisible(repos)
}

这样就无需在repos = ...中设置install.packages()

答案 2 :(得分:1)

因此,似乎Additional_repositories字段仅用于检查是否存在任何建议的包,但它们实际上并未加载,因此如果任何示例或插图使用这些包,则构建过程将中断。我现在已经解决了这个问题,方法是将示例设置为不运行并包含预先构建的插图。