Roxygen和建议包

Bac*_*lin 14 r roxygen2

我正在开发一个包roxygen2,其中包括许多lattice基于可视化的包.这些都不错,但没有必要使用该程序包,因此lattice在上市Suggests:的第DESCRIPTION文件,而不是Depends:部分.

但是,我还没有想出如何加载lattice接获要求用户在两者传递的方式roxygenize()R CMD check.以下两种方式都使得lattice看起来像未声明的依赖关系,并将返回以下错误.

##' @import lattice
{}

##' Visualization
##'
##' @param x Data.
##' @param y More data.
##' @export
vizz <- function(x, y){
    xyplot(y ~ x)
}
Run Code Online (Sandbox Code Playgroud)

##' Visualization
##'
##' @param x Data.
##' @param y More data.
##' @export
vizz <- function(x, y){
    library(lattice)
    xyplot(y ~ x)
}
Run Code Online (Sandbox Code Playgroud)

两者都给出了同样的错误

$ 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.
Run Code Online (Sandbox Code Playgroud)

由于对"roxygen"一词的搜索结合"建议","依赖"和"进口"返回了大量不相关的命中,我在相当一段时间内一直在寻找答案.与此同时,我刚刚列出lattice了许多其他不错但非重要的包作为依赖项,但现在当我即将发布包时,我想以正确的方式解决它.

Cal*_*imo 11

使用的建议(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)
}
Run Code Online (Sandbox Code Playgroud)

只保留Suggests: lattice在你的DESCRIPTION(没有importNAMESPACE).

如果要自定义错误消息,现在可以requireNamespace(lattice)在条件语句中使用,例如:

vizz <- function(x, y){
    if (! requireNamespace("lattice", quietly = TRUE)) {
        stop("Please install lattice: install.packages('lattice')")
    lattice::xyplot(y ~ x)
}
Run Code Online (Sandbox Code Playgroud)