Roxygen и предлагаемые пакеты
Я разрабатываю пакет с roxygen2
, который включает в себя ряд визуализаций на основе lattice
. Они хороши, но не нужны для использования пакета, поэтому lattice
указан в разделе Suggests:
файла DESCRIPTION
, а не в разделе Depends:
.
Однако я еще не понял, как загрузить lattice
по запросу пользователя таким образом, который передает как roxygenize()
, так и R CMD check
. Следующие два способа делают make lattice
похожим на неустановленную зависимость и вернут ошибку ниже.
##' @import lattice
{}
##' Visualization
##'
##' @param x Data.
##' @param y More data.
##' @export
vizz <- function(x, y){
xyplot(y ~ x)
}
и
##' Visualization
##'
##' @param x Data.
##' @param y More data.
##' @export
vizz <- function(x, y){
library(lattice)
xyplot(y ~ x)
}
обе дают ту же ошибку
$ R CMD check dummy.roxygen
* using log directory ‘/###/dummy.roxygen.Rcheck’
* using R version 3.0.2 (2013-09-25)
* using platform: x86_64-pc-linux-gnu (64-bit)
* using session charset: UTF-8
* checking for file ‘dummy.roxygen/DESCRIPTION’ ... OK
* checking extension type ... Package
* this is package ‘dummy’ version ‘1.0-0’
* package encoding: UTF-8
* checking package namespace information ... OK
* checking package dependencies ... ERROR
Namespace dependencies not required: ‘lattice’
See the information on DESCRIPTION files in the chapter ‘Creating R
packages’ of the ‘Writing R Extensions’ manual.
Поскольку поиски на терминах "roxygen" в сочетании с "подсказками", "зависит" и "импорт" возвращают поток нерелевантных обращений, я безуспешно искал ответ на это в течение довольно долгого времени. Тем временем я только что перечислил lattice
и ряд других хороших, но не жизненно важных пакетов, а вместо этого, но теперь, когда я собираюсь опубликовать пакет, я бы хотел решить его надлежащим образом.
Ответы
Ответ 1
Рекомендация, использованная (в 2013 году, когда я впервые написали этот ответ), должна быть require
в условном выражении. Теперь в 2016 году официальная рекомендация должна использовать ::
и позволить R распечатать ошибку there is no package called X
:
##' Visualization
##'
##' @description Visualize the data. \pkg{\link{lattice}} package required.
##' @param x Data.
##' @param y More data.
##' @seealso \pkg{\link{lattice}}
##' @export
vizz <- function(x, y){
lattice::xyplot(y ~ x)
}
И сохраняйте Suggests: lattice
в DESCRIPTION
(нет import
в NAMESPACE
).
Если вы хотите настроить сообщение об ошибке, вы можете использовать requireNamespace(lattice)
в условном выражении, например:
vizz <- function(x, y){
if (! requireNamespace("lattice", quietly = TRUE)) {
stop("Please install lattice: install.packages('lattice')")
lattice::xyplot(y ~ x)
}
Ответ 2
Я не уверен, что вызывало мои проблемы, но после некоторой отладки с помощью @juba оказалось, что я уже предложил правильное решение в вопросе. Правильный способ работы с пакетами nice-but-not-vital состоит в том, чтобы перечислить их в разделе Suggests:
файла DESCRIPTION
и пометить их следующим образом с помощью roxygen.
##' Visualization
##'
##' See \code{\link[lattice]{xyplot}} for details.
##'
##' @param x Data.
##' @param y More data.
##' @export
vizz <- function(x, y){
library(lattice)
xyplot(y ~ x)
}
Это не будет автоматически устанавливаться и не прикрепляться lattice
при установке/прикреплении моего пакета, а просто выкидывать ошибку, если lattice
не может быть присоединена при выполнении функции.