【问题标题】:How to add class-specific alias without generic alias using Roxygen2?如何使用 Roxygen2 添加没有通用别名的类特定别名?
【发布时间】:2012-02-15 09:02:51
【问题描述】:

一个简单的例子是我创建了show 的扩展,这是一个 S4 基础方法。我不想通过在我的包中重新记录show 来引起歧义分叉,并且我还想在新类myPkgSpClass 的文档中将我的扩展文档合并到show,通过添加show,myPkgSpClass-method 的别名。

#' @export
#' @aliases show,myPkgSpClass-method
#' @rdname myPkgSpClass-class
setMethod("show", "myPkgSpClass", function(object){ show(NA) })

我遇到的问题是,这会在 roxygen2 Rd files with duplicated alias 'show': 的文档构建期间导致严重警告,因为在这个包中 show 有多个类扩展,并且 roxygen2 已自动添加所有相关 *-class.Rd 文件的别名列表中的通用术语:

\alias{show}
\alias{show,myPkgSpClass-method}

但我认为我不希望在任何实例中使用通用别名,因为它会迫使我需要在我的包中的 show 和基础 show 之间进行消歧。除了show之外,这个问题也适用于从其他包扩展的其他S4方法。

如果我将所有特定于类的方法标记到同一个 .Rd 文件,则警告消失,但歧义仍然存在,因为 show 别名仍会自动为该文档条目添加。如果我从.Rd 文件中手动删除\alias{show},那么问题似乎解决了,在roxygen 或R CMD check pkgname 期间没有警告。那么如何让 Roxygen2 不添加通用别名呢?

其他背景:

这是从上一期构建的特定问题,用于将 S4 扩展导出/记录到基本方法: Is it necessary to export base method extensions in an R package? Documentation implications?

它比以下关于使用 Roxygen2 记录 S4 方法/类的问题更具体且未涵盖:

How to properly document S4 methods using roxygen2

How to properly document S4 class slots using Roxygen2?

【问题讨论】:

  • github.com/klutometis/roxygen/issues/75 不确定这是否仅适用于 S4。尚未在 S3 泛型上进行测试。
  • 此错误在 CRAN 的 2.2.2 版本中仍然存在(在 github 上添加到问题的评论)。它已在 S4 分支中修复,但在过去两年中似乎不活跃。它绝对不是固定在 CRAN 上的。
  • 我刚刚在 Twitter 上发现了这一点:Hadley Wickham ‏@hadleywickham 3h roxygen2 3.0.0 添加了全面的 S4(和 RC)支持、更好的 S3 支持等等:blog.rstudio.org/2013/12/09/roxygen2-3-0-0 ... #rstats
  • 是的,我还没有测试过 roxygen 3.0,但它报告自动处理 S4 文档。对于这个特定问题,我还不确定它的预期,但是当我弄清楚时我会发布一个答案(如果没有人超过我的话)。

标签: r documentation s4 roxygen roxygen2


【解决方案1】:

似乎在 roxygen2_3.1.0 中已修复:

#' @export
#' @aliases show,myPkgSpClass-method
#' @rdname myPkgSpClass-class
setMethod("show", "myPkgSpClass", function(object){ show(NA) })

产生 myPkgSpClass-class.Rd:

\docType{methods}
\name{show,myPkgSpClass-method}
\alias{show,myPkgSpClass-method}
\usage{
\S4method{show}{myPkgSpClass}(object)
}
\arguments{
  \item{object}{Any R object}
}

正如 Hadley 所说,您不再需要显式设置别名或 rd 名称,例如:

#' my title
#' @export
setMethod("show", "myPkgSpClass", function(object){ show(NA) })

会生成show-myPkgSpClass-method.Rd:

\docType{methods}
\name{show,myPkgSpClass-method}
\alias{show,myPkgSpClass-method}
\title{my title}
\usage{
\S4method{show}{myPkgSpClass}(object)
}
\arguments{
  \item{object}{Any R object}
}
\description{
my title
}

请注意,在这种情况下,您必须设置描述。如果文档条目为空,它将不会生成文档页面。

【讨论】:

  • 您不需要指定别名或 rdname。
  • @hadley 太好了! ... Karl Forner,您能否修改您的答案以反映 Hadley 的更正,并验证它仍然给出您显示的 Rd?
猜你喜欢
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 2015-09-11
  • 2020-03-29
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多