S4的文档" ["缺少'参数

时间:2015-07-07 14:26:52

标签: r s4 roxygen2

这个问题与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
}

2 个答案:

答案 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

还有两点需要注意:

    不推荐使用S4类定义中的
  1. representation(),而是使用slots()。来自?setClass

      

    表示...所有这些参数都是从版本中弃用的   R应该是3.0.0,应该避免使用。

  2. 如果您希望其他人能够扩展它,您只需要@export类定义。严格来说,输出方法并非必要,但建议。请参阅https://cran.r-project.org/web/packages/roxygen2/vignettes/namespace.html