在 CRAN 包中包含非 CRAN 包
Include non-CRAN package in CRAN package
问题很简单。第一:
- 是否可以在 CRAN 包中包含非 CRAN(或 bioconductor,或 omega hat)包,并在示例中实际使用该包中的工具。
- 如果是,如何设置
DESCRIPTION
文件等使其合法并通过 CRAN 检查?
具体来说,我问的是 openNLPmodels.en,它曾经是一个 CRAN 包。它非常有用,并希望包含它的功能。我可以解决这个问题,而不是在示例中实际使用 openNLPmodels.en 或为其创建单元测试,并在使用函数时安装它(类似于 gender 包安装它需要的数据集)但我更喜欢一种允许我 运行 检查、文本、示例的方法。
这是下载和安装的方式openNLPmodels.en
install.packages(
"http://datacube.wu.ac.at/src/contrib/openNLPmodels.en_1.5-1.tar.gz",
repos=NULL,
type="source"
)
有可能,但是! ...
DESCRIPTION
文件中有一个字段可供您使用:
Additional_repositories: http://ghrr.github.io/drat
但是!
一切 依赖于from 额外存储库package 的功能必须是绝对可选的。
所以这个仓库中的包应该放在 Suggests
下。
我不是 100% 确定 BioConductor 和 OmegaHat 是否被认为是主流。
现有答案很好,但没有详细解释整个过程,所以发布这个。
Is it possible to include a non-CRAN (or bioconductor, or omega hat) package in a CRAN package and actually use tools from that package in examples.
是的,这是可能的。此类非 CRAN 的任何使用(包代码、示例、测试、小插图)都必须像 Suggests 中的任何其他包一样进行转义,最好使用
if (requireNamespace("non.cran.pkg", quietly=TRUE)) {
non.cran.pkg::fun()
} else {
cat("skipping functionality due to missing Suggested dependency")
}
If yes how does one set up the DESCRIPTION file etc. to make it legit and pass CRAN checks?
您需要在 DESCRIPTION 文件中使用 Additional_repositories
字段。该字段中提供的位置必须包含预期目录结构,适当目录中的 PACKAGES
文件,并且 PACKAGES
文件必须列出非 CRAN 包。
现在转到 openNLPmodels.en
包的特定示例。
根据你如何下载和安装这个包的方式,将不可能将它用作依赖项并传递给 CRAN。 openNLPmodels.en
必须以 R 存储库预期的结构发布。否则,您没有有效的位置可放入 Additional_repositories
字段。
你可以做的是下载非 CRAN 包并自己将其发布到你的 R 存储库中,然后在你的 CRAN 包的 Additional_repositories
字段中使用该位置。
以下是如何操作的示例:
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
函数很好地处理。为确保正确创建存储库,您可以列出该存储库中可用的包:
available.packages(repos=file.path("file:/",getwd()))
它应该在那里列出你的非 CRAN 包。
然后在 R 存储库中发布非 CRAN 包,您应该将存储库的位置放入 CRAN 包的 Additional_repositories
字段中。在这种情况下,位置将是 file.path("file:/",getwd())
表达式返回的位置。
请注意,它使用本地计算机上的位置,您可能希望将其放在网上,以便任何检查您的 CRAN 包(包括检查 CRAN 本身)的计算机都可以访问 url。为此,只需将您的 src
目录移动到 public 目录,该目录将托管在某个在线位置并使用该服务器的位置。
现在再次查看您的非 CRAN 包,我们可以看到它的 url 中有 src/contrib,因此我们可以假设正确的 R它的存储库已经存在,我们不必创建和发布新的存储库。
因此,您的安装说明可能类似于
install.packages(
"openNLPmodels.en",
repos="http://datacube.wu.ac.at",
type="source"
)
然后,您的 CRAN 包所需要做的就是使用可用的现有存储库
Additional_repositories http://datacube.wu.ac.at
usethis::use_dev_package
函数解决了这个问题。
例如,运行这一行:
usethis::use_dev_package(package = "h3", type = "Imports", remote = "crazycapivara/h3-r")
将自动将以下行写入您的 DESCRIPTION
文件:
Imports:
h3 (>= 3.7.1)
Remotes:
crazycapivara/h3-r
请注意,因为 github 是 R 中最常用的非官方包分发,所以它是默认值。因此,请确保 DESCRIPTION
文件的 Remotes
部分中的条目没有 github::
前缀。
问题很简单。第一:
- 是否可以在 CRAN 包中包含非 CRAN(或 bioconductor,或 omega hat)包,并在示例中实际使用该包中的工具。
- 如果是,如何设置
DESCRIPTION
文件等使其合法并通过 CRAN 检查?
具体来说,我问的是 openNLPmodels.en,它曾经是一个 CRAN 包。它非常有用,并希望包含它的功能。我可以解决这个问题,而不是在示例中实际使用 openNLPmodels.en 或为其创建单元测试,并在使用函数时安装它(类似于 gender 包安装它需要的数据集)但我更喜欢一种允许我 运行 检查、文本、示例的方法。
这是下载和安装的方式openNLPmodels.en
install.packages(
"http://datacube.wu.ac.at/src/contrib/openNLPmodels.en_1.5-1.tar.gz",
repos=NULL,
type="source"
)
有可能,但是! ...
DESCRIPTION
文件中有一个字段可供您使用:
Additional_repositories: http://ghrr.github.io/drat
但是!
一切 依赖于from 额外存储库package 的功能必须是绝对可选的。
所以这个仓库中的包应该放在 Suggests
下。
我不是 100% 确定 BioConductor 和 OmegaHat 是否被认为是主流。
现有答案很好,但没有详细解释整个过程,所以发布这个。
Is it possible to include a non-CRAN (or bioconductor, or omega hat) package in a CRAN package and actually use tools from that package in examples.
是的,这是可能的。此类非 CRAN 的任何使用(包代码、示例、测试、小插图)都必须像 Suggests 中的任何其他包一样进行转义,最好使用
if (requireNamespace("non.cran.pkg", quietly=TRUE)) {
non.cran.pkg::fun()
} else {
cat("skipping functionality due to missing Suggested dependency")
}
If yes how does one set up the DESCRIPTION file etc. to make it legit and pass CRAN checks?
您需要在 DESCRIPTION 文件中使用 Additional_repositories
字段。该字段中提供的位置必须包含预期目录结构,适当目录中的 PACKAGES
文件,并且 PACKAGES
文件必须列出非 CRAN 包。
现在转到 openNLPmodels.en
包的特定示例。
根据你如何下载和安装这个包的方式,将不可能将它用作依赖项并传递给 CRAN。 openNLPmodels.en
必须以 R 存储库预期的结构发布。否则,您没有有效的位置可放入 Additional_repositories
字段。
你可以做的是下载非 CRAN 包并自己将其发布到你的 R 存储库中,然后在你的 CRAN 包的 Additional_repositories
字段中使用该位置。
以下是如何操作的示例:
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
函数很好地处理。为确保正确创建存储库,您可以列出该存储库中可用的包:
available.packages(repos=file.path("file:/",getwd()))
它应该在那里列出你的非 CRAN 包。
然后在 R 存储库中发布非 CRAN 包,您应该将存储库的位置放入 CRAN 包的 Additional_repositories
字段中。在这种情况下,位置将是 file.path("file:/",getwd())
表达式返回的位置。
请注意,它使用本地计算机上的位置,您可能希望将其放在网上,以便任何检查您的 CRAN 包(包括检查 CRAN 本身)的计算机都可以访问 url。为此,只需将您的 src
目录移动到 public 目录,该目录将托管在某个在线位置并使用该服务器的位置。
现在再次查看您的非 CRAN 包,我们可以看到它的 url 中有 src/contrib,因此我们可以假设正确的 R它的存储库已经存在,我们不必创建和发布新的存储库。 因此,您的安装说明可能类似于
install.packages(
"openNLPmodels.en",
repos="http://datacube.wu.ac.at",
type="source"
)
然后,您的 CRAN 包所需要做的就是使用可用的现有存储库
Additional_repositories http://datacube.wu.ac.at
usethis::use_dev_package
函数解决了这个问题。
例如,运行这一行:
usethis::use_dev_package(package = "h3", type = "Imports", remote = "crazycapivara/h3-r")
将自动将以下行写入您的 DESCRIPTION
文件:
Imports:
h3 (>= 3.7.1)
Remotes:
crazycapivara/h3-r
请注意,因为 github 是 R 中最常用的非官方包分发,所以它是默认值。因此,请确保 DESCRIPTION
文件的 Remotes
部分中的条目没有 github::
前缀。