这个问题与this question非常相似,但是当我尝试答案时,我会收到一个补充说明'关注R CMD check
。虽然它只是一个NOTE
我真的想要一个完全干净的检查。
* checking Rd line widths ... NOTE
Error: 8: no comma in argument list following \S4method
Execution halted
如果我传递所有其他参数(i,j,drop
)并记录所有参数但我不会使用它们,我可以摆脱这个。在我看来,如果在这种情况下它没有相关性,那么添加额外的文档将是一种浪费。
#' An S4 class that stores a list.
#' @export
setClass("testClass",
representation(a="list"))
#' Extract parts of testClass.
#' @param x testClass
#'
setMethod("[", signature(x = "testClass"),
function (x){
print("void function")
}
)
Rd文件导致错误:
% Generated by roxygen2 (4.1.1): do not edit by hand
% Please edit documentation in R/test.R
\docType{methods}
\name{[,testClass-method}
\alias{[,testClass-method}
\title{Extract all elements}
\usage{
\S4method{[}{testClass}(x)
}
\arguments{
\item{x}{testClass}
}
\description{
Extract all elements
}
如果我定义并记录所有参数
,则以下Rd不会导致错误% Generated by roxygen2 (4.1.1): do not edit by hand
% Please edit documentation in R/test.R
\docType{methods}
\name{[,testClass,missing,missing,missing-method}
\alias{[,testClass,missing,missing,missing-method}
\title{Extract all elements}
\usage{
\S4method{[}{testClass,missing,missing,missing}(x, i, j, drop)
}
\arguments{
\item{x}{testClass}
\item{i}{missing}
\item{j}{missing}
\item{drop}{missing}
}
\description{
Extract all elements
}
答案 0 :(得分:3)
您可以尝试尝试以下内容:
setMethod("[", signature(x="testClass", i="missing", j="missing", drop="missing"), ...)
虽然我甚至没有指定i
似乎很奇怪。您也可以将i
设置为"ANY"
。
此外,您可能需要将@param
标记更新为:
#' @param x testClass
#' @param i missing
#' @param j missing
#' @param drop missing
您可能不关心这些参数,但您使用的是定义它们的通用([
),因此您几乎有义务在方法中定义它们,因此也应该在文档中定义它们。突出显示您的特定方法与通用方法不同。来自?methods
:
方法定义需要具有与泛型函数相同的形式参数,因为方法调度机制不会重新匹配参数,这是出于效率和一致性的原因。
答案 1 :(得分:0)
这里的问题是您正在尝试为已具有定义的泛型定义方法,并且您没有为该泛型方法中的参数提供签名。此处,通用名称为[
- 请参阅?[
。氧气生成的Rd文件以某种方式生成错误,因为它无法将通用的签名与它从[.testClass
方法自动生成的签名匹配。
解决方案:根据通用的签名定义方法的完整签名。以下代码不会在R CMD CHECK --as-cran
中生成错误。
#' An S4 class that stores a list.
#' @docType class
#' @name testClass-class
#' @export
setClass("testClass",
slots = c(a="list"))
#' Extract parts of testClass.
#' @param x \code{testClass} object
#' @param i index for the testClass list
#' @param j not used
#' @param drop not used
#' @param ... additional arguments not used here
#' @rdname testClass-class
#' @export
setMethod("[", signature(x = "testClass"),
function (x, i, j, ..., drop=FALSE) {
print("void function")
}
)
顺便说一下,如果你运行它,你可以看到[
只是一个方法/函数:
x <- new("testClass")
tmp1 <- x[1]
## [1] "void function"
tmp2 <- `[`(x, 1)
## [1] "void function"
identical(tmp1, tmp2)
## [1] TRUE
还有两点需要注意:
representation()
,而是使用slots()
。来自?setClass
:
表示...所有这些参数都是从版本中弃用的 R应该是3.0.0,应该避免使用。
如果您希望其他人能够扩展它,您只需要@export
类定义。严格来说,输出方法并非必要,但建议。请参阅https://cran.r-project.org/web/packages/roxygen2/vignettes/namespace.html。