2012-01-20 149 views
12

一個簡單的例子是我創建了一個擴展到show,這是一個S4基本方法。我不想通過重新記錄show在我的包引起歧義叉,我也希望我的分機的文檔鞏固show文檔中新類,myPkgSpClass,通過添加一個別名show,myPkgSpClass-method如何使用Roxygen2添加沒有通用別名的類別別名?

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

它比更具體的,而不是覆蓋,下面的關於歸檔S4方法/類的問題,使用Roxygen2:

How to properly document S4 methods using roxygen2

How to properly document S4 class slots using Roxygen2?

+2

提交錯誤報告。 – hadley

+0

https://github.com/klutometis/roxygen/issues/75不知道這是否僅適用於S4。尚未在S3泛型上進行測試。 –

+1

該錯誤在2.2版中仍然存在。2關於CRAN(評論添加到github上的問題)。它在S4分支中是固定的,但在過去的兩年中似乎沒有活動。它絕對不是固定在CRAN上。 –

回答

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} 
} 

正如哈德利說,你不再需要明確設置別名或在RD名稱,例如:

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

將產生顯示,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 
} 

請注意,在這種情況下,您必須設置說明。如果文檔條目爲空,它將不會生成文檔頁面。

+2

您不需要指定別名或rdname。 – hadley

+0

@hadley太棒了!卡爾福爾納,你可以修改你的答案,以反映哈德利的改正,並驗證它仍然給出你已經顯示的路? –