Roxygen和建议包

时间:2013-10-18 09:42:00

标签: r roxygen2

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

但是,我还没有想出如何根据latticeroxygenize()传递来自用户的请求加载R CMD check。以下两种方式都使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.

自从搜索术语&#34; roxygen&#34;结合&#34;暗示&#34;,&#34;取决于&#34;和&#34;进口&#34;回归大量无关紧要的点击,我已经有一段时间没有找到答案。与此同时,我刚刚将lattice和许多其他不错但非重要的包作为依赖项列出,但现在当我即将发布包时,我想以正确的方式解决它。

2 个答案:

答案 0 :(得分:11)

在条件声明中使用的建议(2013年,当我第一次写这个答案时)是require。现在,2016年the official recommendation将使用::并让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 DESCRIPTIONimport中没有NAMESPACE)。

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

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

答案 1 :(得分:0)

我不确定是什么导致了我的问题,但在@juba的帮助下进行了一些调试后发现我已经在问题中提出了正确的解决方案。处理好但不重要的包的正确方法是将它们列在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,则只会抛出错误。