[英]Include non-CRAN package in CRAN package
問題很簡單。 第一的:
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.