Существующий ответ хорош, но не объясняет весь процесс в деталях, поэтому публикует этот.
Можно ли включить не-CRAN-пакет (или биопроводник, или омега-шляпу) в CRAN-пакет и фактически использовать инструменты из этого пакета в примерах.
Да, это возможно. Любое использование (код пакета, примеры, тесты, виньетки) такого не-CRAN должно быть экранировано, как и любой другой пакет в Suggests, в идеале с использованием
if (requireNamespace("non.cran.pkg", quietly=TRUE)) {
non.cran.pkg::fun()
} else {
cat("skipping functionality due to missing Suggested dependency")
}
Если да, то как настроить файл DESCRIPTION и т. д., чтобы сделать его законным и пройти проверки CRAN?
Вам нужно использовать поле Additional_repositories
в файле DESCRIPTION. Расположение, указанное в этом поле, должно содержать ожидаемую структуру каталогов, файл PACKAGES
в соответствующем каталоге, а файл PACKAGES
должен иметь указанный пакет, отличный от CRAN.
Теперь перейдем к вашему конкретному примеру пакета openNLPmodels.en
. В соответствии с способом загрузки и установки этого пакета его нельзя будет использовать в качестве зависимости и передать CRAN. openNLPmodels.en
должен быть опубликован в структуре, ожидаемой от репозитория R. В противном случае у вас нет допустимого местоположения для ввода в поле Additional_repositories
.
Что вы можете сделать, так это загрузить пакет, отличный от CRAN, и опубликовать его в своем репозитории R самостоятельно, а затем использовать это местоположение в поле Additional_repositories
в вашем пакете CRAN. Вот пример того, как это сделать:
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. Затем, опубликовав пакет, отличный от CRAN, в репозитории R, вы должны разместить репозиторий в поле Additional_repositories
вашего пакета CRAN. В этом случае местоположение будет возвращено выражением file.path("file:/",getwd())
.
Обратите внимание, что он использует местоположение на вашем локальном компьютере, вы, вероятно, захотите разместить его в сети, чтобы к URL-адресу мог получить доступ любой компьютер, проверяющий ваш пакет CRAN, включая проверки самого CRAN. Для этого просто переместите каталог 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
person
jangorecki
schedule
20.11.2020
openNLPmodels.en
и узнайте, сможете ли вы принять или разветвить его? - person Jeroen   schedule 26.10.2015