14

一个简单的例子是我创建了一个扩展show,这是一个 S4 基础方法。我不想通过在我的包中重新记录来引起歧义分叉,show并且我还想通过为.showmyPkgSpClassshow,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在我的包和 base之间消除歧义show。此问题也适用于从其他包扩展的其他 S4 方法,除了show.

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

其他背景:

这是从上一期关于将 S4 扩展导出/记录到基本方法的问题中构建的一个特定问题: 是否有必要在 R 包中导出基本方法扩展?文档影响?

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

如何使用 roxygen2 正确记录 S4 方法

如何使用 Roxygen2 正确记录 S4 类插槽?

4

1 回答 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
}

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

于 2014-03-21T10:28:45.043 回答