如何使用Roxygen2添加类专属的别名而不是通用的别名?

14

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

#' @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?

不确定这是否仅适用于S4。尚未在S3通用函数上进行测试。 - Paul 'Joey' McMurdie
1
这个错误在CRAN的2.2.2版本中仍然存在(已在github上的问题评论中添加)。它已经在S4分支中修复,但是似乎过去两年都没有活动。在CRAN上肯定没有被修复。 - Joris Meys
1
我刚在Twitter上看到这个消息:Hadley Wickham ‏@hadleywickham 3h。roxygen2 3.0.0增加了全面的S4(和RC)支持,更好的S3支持以及许多其他功能:http://blog.rstudio.org/2013/12/09/roxygen2-3-0-0/… #rstats - Stephen Henderson
是的,我还没有测试过roxygen 3.0,但据说它可以自动处理S4文档。对于这个特定的问题,我还不确定它期望什么,但是如果没有人比我更快解决,我会在找到答案后发布一个答案。 - Paul 'Joey' McMurdie
1个回答

2

似乎在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
}

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

3
无需指定别名或rdname。 - hadley
@hadley 太好了!Karl Forner,你能修改你的答案以反映Hadley的更正,并验证它是否仍然给出了你展示的Rd吗? - Paul 'Joey' McMurdie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接