我正在开发一个带有roxygen2
的软件包,其中包括许多基于lattice
的可视化。这些很好,但对于使用包不是必需的,因此lattice
列在DESCRIPTION
文件的Suggests:
部分而不是Depends:
部分。
但是,我还没有弄清楚如何根据用户的请求以同时通过roxygenize()
和R CMD check
的方式加载lattice
。以下两种方式都使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
和其他一些不错但非重要的包作为依赖项,但现在当我即将发布包时,我想以正确的方式解决它。
建议(在 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
里(NAMESPACE
没有import
)。
如果要自定义错误消息,现在可以在条件语句中使用requireNamespace(lattice)
,例如:
vizz <- function(x, y){
if (! requireNamespace("lattice", quietly = TRUE)) {
stop("Please install lattice: install.packages('lattice')")
lattice::xyplot(y ~ x)
}
我不确定是什么导致了我的问题,但是在@juba的帮助下进行了一些调试后,事实证明我已经在问题中提出了正确的解决方案。处理漂亮但不重要的软件包的正确方法是将它们列在DESCRIPTION
文件的Suggests:
部分中,并使用 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
则只会引发错误。