簡體   English   中英

在 CRAN 包中包含非 CRAN 包

[英]Include non-CRAN package in CRAN package

問題很簡單。 第一的:

  1. 是否可以在 CRAN 包中包含非 CRAN(或 bioconductor,或 omega hat)包,並在示例中實際使用該包中的工具。
  2. 如果是,如何設置DESCRIPTION文件等以使其合法並通過 CRAN 檢查?

具體來說,我問的是曾經是 CRAN 包的openNLPmodels.en 它非常有用,並且希望包含其中的功能。 我可以做一個解決方法而不是在示例中實際使用openNLPmodels.en或為它創建單元測試,並在函數被使用時安裝它(類似於性別包如何安裝它需要的數據集)但我會更喜歡一種允許我運行檢查、文本、示例的方法。

這是下載和安裝openNLPmodels.en 的方式

install.packages(
    "http://datacube.wu.ac.at/src/contrib/openNLPmodels.en_1.5-1.tar.gz",  
    repos=NULL, 
    type="source"
)

現有答案很好,但沒有詳細解釋整個過程,所以發布這個。


是否可以在 CRAN 包中包含非 CRAN(或 bioconductor,或 omega hat)包,並在示例中實際使用該包中的工具。

對的,這是可能的。 必須像Suggests 中的任何其他包一樣對此類非 CRAN 的任何使用(包代碼、示例、測試、小插圖)進行轉義,理想情況下使用

if (requireNamespace("non.cran.pkg", quietly=TRUE)) {
  non.cran.pkg::fun()
} else {
  cat("skipping functionality due to missing Suggested dependency")
}

如果是,如何設置描述文件等以使其合法並通過 CRAN 檢查?

您需要在描述文件中使用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 包的機器都可以訪問該 url,包括檢查 CRAN 本身。 為此,只需將您的src目錄移動到將在線托管的公共目錄並使用該服務器的位置。


現在再次查看您的非 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

有可能,但是! ...

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

Additional_repositories: http://ghrr.github.io/drat

但!

依賴於功能從附加存儲庫中的一切必須是絕對可選

所以來自這個 repo 的包應該放在Suggests下。

例子

我不能 100% 確定 BioConductor 和 OmegaHat 是否被認為是主流。

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::前綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM