我正在编写一个包,它定义了一个新类,测量器和一个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方法的正确方法.
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)