如何使用Roxygen从不同的包中正确记录泛型的S3方法?

And*_*rie 45 r roxygen

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

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

我使用了Hadley编写的以下两页作为灵感: 命名空间文档功能,两者都说正确的语法是@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)
}
Run Code Online (Sandbox Code Playgroud)

和氧化输出,即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}}
Run Code Online (Sandbox Code Playgroud)

Rei*_*son 41

更新

从roxygen2> 3.0.0开始,软件包在为您解决所有问题方面变得更加聪明.你现在只需要@export标签和roxygen就可以计算出你正在记录什么样的东西,并NAMESPACE在转换过程中编写等等时做适当的事情.

您可能需要帮助解决氧气问题.Hadley Wickham在他的R Packages书中使用的一个例子是.有歧义的函数名,什么是类,什么是通用函数(,或)?all.equal.data.frameallall.equalall.equal.data

在这种情况下,您可以通过明确告知通用和类/方法来帮助解决问题,例如

@method all.equal data.frame
Run Code Online (Sandbox Code Playgroud)

如果您需要明确使用,下面的原始答案将解释有关旧行为的更多信息@method.


原版的

该功能应与@method标签一起记录:

#' @method print surveyor
Run Code Online (Sandbox Code Playgroud)

在初读时,@ hadley的文档对我来说有点混乱,因为我不熟悉roxygen,但经过几节阅读后,我想我明白了你需要的原因@method.

您正在编写该print方法的完整文档.@S3method与导出NAMESPACE方法有关并安排.@S3method不是用于记录方法.

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

\method{print}{surveyor}(x, ...)
Run Code Online (Sandbox Code Playgroud)

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

  • 是.砰的一声.我需要在我的文档中更清楚. (3认同)
  • @cboettig是的,`@ method`是文档的标签(`.Rd`文件),`@ S3method`是名称空间机制.如果您拥有自己的"NAMESPACE"文件,那么现在需要这两天.如果你真的想让方法在包的命名空间之外可见,你只需要`@export`. (3认同)

had*_*ley 25

从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)
}
Run Code Online (Sandbox Code Playgroud)

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

#' @export
print.surveyor <- function(x, ...){
    cat("Surveyor\n\n")
    print.listof(x)
}
Run Code Online (Sandbox Code Playgroud)