首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CRAN包中包括非CRAN包

在CRAN包中包括非CRAN包
EN

Stack Overflow用户
提问于 2015-10-25 21:32:17
回答 3查看 1.1K关注 0票数 18

这个问题很简单。第一:

  1. 是否可以将非CRAN (或生物导体,或omega帽子)包包含在CRAN包中,并在示例中实际使用该包中的工具。
  2. 如果是,如何设置DESCRIPTION文件等使其合法并通过CRAN检查?

具体来说,我要问的是过去是个CRAN包的openNLPmodels.en。它非常有用,并希望包含其中的功能。我可以在示例中做一些工作,而不是实际使用openNLPmodels.en,或者为它创建单元测试,并让它在函数使用时安装(类似于gender包安装它所需的数据集),但我更喜欢一种允许我运行检查、文本、示例的方法。

这就是下载和安装openNLPmodels.en的方式

代码语言:javascript
复制
install.packages(
    "http://datacube.wu.ac.at/src/contrib/openNLPmodels.en_1.5-1.tar.gz",  
    repos=NULL, 
    type="source"
)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-20 10:09:37

现有的答案是好的,但没有充分解释整个过程的细节,所以张贴这个。

是否可以将非CRAN (或生物导体,或omega帽子)包包含在CRAN包中,并在示例中实际使用该包中的工具。

是的,这是可能的。这类非CRAN的任何使用(包代码、示例、测试、小片段)都必须像建议的任何其他包一样转义,最好使用

代码语言:javascript
复制
if (requireNamespace("non.cran.pkg", quietly=TRUE)) {
  non.cran.pkg::fun()
} else {
  cat("skipping functionality due to missing Suggested dependency")
}

如果是,如何设置描述文件等使其合法并通过CRAN检查?

您需要在描述文件中使用Additional_repositories字段。该字段中提供的位置必须包含expect目录结构、适当目录中的PACKAGES文件和PACKAGES文件必须列出非CRAN包。

现在来看一下openNLPmodels.en包的特定示例。根据下载和安装的方式,这个包不可能作为依赖项使用并传递给CRAN。openNLPmodels.en必须发布在R存储库的结构中。否则,您就没有一个有效的位置放置到Additional_repositories字段中。

您可以做的是下载非CRAN包并将其发布到您的R存储库中,然后在CRAN包中的Additional_repositories字段中使用该位置。下面是如何做到这一点的一个例子:

代码语言:javascript
复制
dir.create("src/contrib", recursive=TRUE)
download.file("http://datacube.wu.ac.at/src/contrib/openNLPmodels.en_1.5-1.tar.gz", "src/contrib/openNLPmodels.en_1.5-1.tar.gz")
tools::write_PACKAGES("src/contrib")

我们只是将包源放在预期的目录src/contrib中,其余的都由write_PACKAGES函数很好地处理。为了确保正确创建存储库,可以列出存储库中可用的包:

代码语言:javascript
复制
available.packages(repos=file.path("file:/",getwd()))

上面应该列有你的非脆包。然后,在R存储库中发布非CRAN包,您应该将存储库定位到CRAN包的Additional_repositories字段中。在这种情况下,位置将是file.path("file:/",getwd())表达式返回的位置。

请注意,它使用本地机器上的位置,您可能希望将其放在联机上,以便任何检查CRAN包的机器都可以访问url,包括检查CRAN本身。为此,只需将您的src目录移动到一个要在线托管的公共目录中,并使用该服务器的位置即可。

现在再看看您的非CRAN包,我们可以看到它的url中有src/cont肋骨,因此我们可以假设已经存在适当的R存储库,我们不必创建和发布新的存储库。因此,您的安装指令可能如下所示

代码语言:javascript
复制
install.packages(
  "openNLPmodels.en", 
  repos="http://datacube.wu.ac.at",
  type="source"
)

然后,您对CRAN包所需要的就是使用现有的存储库。

代码语言:javascript
复制
Additional_repositories http://datacube.wu.ac.at
票数 1
EN

Stack Overflow用户

发布于 2019-06-21 19:40:09

是可能的但是!

DESCRIPTION文件中有一个字段可供您使用:

代码语言:javascript
复制
Additional_repositories: http://ghrr.github.io/drat

但!

Everything依赖于的功能--来自的--来自附加存储库的必须是绝对可选的。

因此,这个回购包应该放在Suggests下面。

示例

我不能百分之百确定BioConductor和OmegaHat是否被认为是主流。

票数 0
EN

Stack Overflow用户

发布于 2021-11-10 21:41:22

usethis::use_dev_package函数解决了这个问题。

例如,运行这一行:

代码语言:javascript
复制
usethis::use_dev_package(package = "h3", type = "Imports", remote = "crazycapivara/h3-r")

将自动将下列行写入您的DESCRIPTION文件:

代码语言:javascript
复制
Imports: 
    h3 (>= 3.7.1)
Remotes:  
    crazycapivara/h3-r

注意,由于github是R中最常用的非官方包分发版,所以它是默认的。因此,确保在github::文件的Remotes部分中的条目中没有任何DESCRIPTION前缀。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33335321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档