我正在开发一个需要另一个包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.
答案 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)
具体来说,请注意您可以指定:
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字段仅用于检查是否存在任何建议的包,但它们实际上并未加载,因此如果任何示例或插图使用这些包,则构建过程将中断。我现在已经解决了这个问题,方法是将示例设置为不运行并包含预先构建的插图。