49

我正在编写一个包,它定义了一个新类、测量器和一个print方法,即print.surveyor. 我的代码工作正常,我使用 roxygen 进行内联文档。但R CMD check发出警告:

在文档对象“print.surveyor”中使用但不在代码中使用的函数/方法:打印

我使用了 Hadley 编写的以下两页作为灵感: NamespacesDocumenting functions,两者都指出正确的语法是@method function-name class

所以我的问题是:print使用 Roxygen 为我的新课程记录方法的正确方法是什么?更具体地说,我如何摆脱警告?


这是我的代码:(注释文档表明尝试修复此问题,但均无效。)

#' Prints surveyor object.
#' 
#' Prints surveyor object
#' 
## #' @usage print(x, ...)
## #' @aliases print print.surveyor
#' @param x surveyor object
#' @param ... ignored
#' @S3method print surveyor
print.surveyor <- function(x, ...){
    cat("Surveyor\n\n")
    print.listof(x)
}

和 roxygenized 输出,即print.surveyor.Rd

\name{print.surveyor}
\title{Prints surveyor object.}
\usage{print(x, ...)
#'}
\description{Prints surveyor object.}
\details{Prints surveyor object

#'}
\alias{print}
\alias{print.surveyor}
\arguments{\item{x}{surveyor object}
\item{...}{ignored}}
4

3 回答 3

43

更新

从 roxygen2 > 3.0.0 开始,该软件包在为您解决所有这些问题方面变得更加聪明。您现在只需要@export标签,roxygenNAMESPACE将计算出您正在记录什么样的东西,并在转换期间编写等时做适当的事情。

在某些例外情况下,您可能需要帮助roxygen。Hadley Wickham 在他的R Packages书中使用的一个例子是. 该函数名称对于什么是类以及什么是泛型函数(、或)存在歧义?all.equal.data.frameallall.equalall.equal.data

在这种情况下,您可以通过明确告知它泛型和类/方法来帮助roxygen ,例如

@method all.equal data.frame

如果您需要明确使用@method.


原来的

该功能应使用以下@method标签记录:

#' @method print surveyor

在最初阅读时,@hadley 的文档对我来说有点困惑,因为我对roxygen不熟悉,但是在阅读了该部分之后,我想我明白了你需要的原因@method

您正在为该print方法编写完整的文档。@S3methodNAMESPACE和安排要导出的方法有关。@S3method不是用来记录方法的。

您的 Rd 文件应在该usage部分中包含以下内容:

\method{print}{surveyor}(x, ...)

如果这工作正常,因为这是在 Rd 文件中记录 S3 方法的正确方法。

于 2011-06-29T08:20:48.763 回答
27

从 roxygen2 > 3.0.0. 开始,您只需要@export因为 roxygen 可以确定这print.surveyor是一种 S3 方法。这意味着您现在只需要

#' Prints surveyor object.
#' 
#' @param x surveyor object
#' @param ... ignored
#' @export
print.surveyor <- function(x, ...){
    cat("Surveyor\n\n")
    print.listof(x)
}

但是,在这种情况下,由于文档不是很有用,最好这样做:

#' @export
print.surveyor <- function(x, ...){
    cat("Surveyor\n\n")
    print.listof(x)
}
于 2014-03-23T22:54:12.000 回答
1

@export仅在加载泛型时才有效。如果泛型在另一个包中,则需要导入泛型。使用当前的 roxygen,可以使用类似的块解决此问题

#' @importFrom tibble data_frame
#' @export
tibble::data_frame

取自dplyr/R/reexport-tibble.r。在这个例子中,data_frame方法是从 tibble 包中导入的,并且 tibble::data_frame 是导出的。然后将此类重新导出的对象记录在一个reexports.Rd文件中 - 不用说 - 满足 R CMD 检查。

于 2019-10-31T00:43:43.343 回答