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

时间:2011-06-29 07:36:11

标签: r roxygen

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

  

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

我使用了以下两页,由哈德利撰写,作为灵感: NamespacesDocumenting functions,两者均声明正确的语法为@method function-name class

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


这是我的代码:(评论文档表明尝试修复此问题,但没有一个有效。)

#' 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)
}

和氧化输出,即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}}

3 个答案:

答案 0 :(得分:41)

更新

从roxygen2开始&gt; 3.0.0这个软件包已经为你解决这个问题变得更聪明了。你现在只需要@export标签,而 roxygen 就会知道你是什么样的东西在转换过程中编写NAMESPACE等时正在记录并做适当的事情。

您可能需要帮助 roxygen 。 Hadley Wickham在 R Packages 一书中使用的exampleall.equal.data.frame。关于什么是类以及通用函数(allall.equalall.equal.data),该函数名称存在歧义?

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

@method all.equal data.frame

如果您需要明确使用@method,则下面的原始答案会详细说明旧行为。


原始

该功能应记录在@method标签中:

#' @method print surveyor

在初读时,@ hadley的文档对我来说有点混乱,因为我不熟悉 roxygen ,但经过几节阅读后,我想我理解你需要的原因{{ 1}}。

您正在撰写@method方法的完整文档。 print@S3method相关,并安排导出方法NAMESPACE不适用于记录方法。

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

usage

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

答案 1 :(得分:25)

从roxygen2开始&gt; 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)
}

答案 2 :(得分:0)

@export仅在加载了泛型后才起作用。如果该通用文件位于另一个软件包中,则需要导入该通用文件。使用当前的氧气,可以通过类似

的块来解决
#' @importFrom tibble data_frame
#' @export
tibble::data_frame

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