我正在编写一个包,为此定义一个新类,测量器和print
方法,即print.surveyor
。我的代码工作正常,我使用roxygen进行内联文档。但是R CMD check
会发出警告:
使用的函数/方法 文档对象'print.surveyor' 但不在代码中:print
我使用了以下两页,由哈德利撰写,作为灵感:
Namespaces和Documenting 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}}
答案 0 :(得分:41)
从roxygen2开始&gt; 3.0.0这个软件包已经为你解决这个问题变得更聪明了。你现在只需要@export
标签,而 roxygen 就会知道你是什么样的东西在转换过程中编写NAMESPACE
等时正在记录并做适当的事情。
您可能需要帮助 roxygen 。 Hadley Wickham在 R Packages 一书中使用的example是all.equal.data.frame
。关于什么是类以及通用函数(all
,all.equal
或all.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检查。