16

我正在开发一个roxygen2包含许多lattice基于可视化的包。这些很好,但对于使用包来说不是必需的,因此lattice列在文件的Suggests:部分DESCRIPTION而不是Depends:部分中。

但是,我还没有弄清楚如何以同时通过和lattice的方式根据用户的请求进行加载。以下两种方式都使看起来像一个未声明的依赖项,并将返回下面的错误。roxygenize()R CMD checklattice

##' @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”一词与“suggests”、“depends”和“imports”的搜索返回了大量不相关的点击,我一直在寻找这个问题的答案,但没有成功。同时,我刚刚列出lattice了一些其他不错但非重要的包作为依赖项,但现在当我即将发布包时,我想以正确的方式解决它。

4

2 回答 2

13

使用的建议(在 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)
}
于 2013-12-02T17:01:41.410 回答
0

我不确定是什么导致了我的问题,但在@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

于 2013-10-19T09:30:20.143 回答