2012-01-20 18 views
12

Một ví dụ đơn giản là tôi đã tạo phần mở rộng cho show, là phương pháp cơ sở S4. Tôi không muốn gây ra một ngã ba định hướng bằng cách tái tài liệu show trong gói của mình và tôi cũng muốn hợp nhất tài liệu của tiện ích mở rộng của tôi thành show trong tài liệu cho lớp mới, myPkgSpClass, bằng cách thêm bí danh cho show,myPkgSpClass-method.Làm thế nào để thêm bí danh lớp cụ thể mà không có bí danh chung bằng cách sử dụng Roxygen2?

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

Vấn đề tôi đang gặp, là điều này dẫn đến một cảnh báo nghiêm trọng trong tài liệu-xây dựng bởi roxygen2, Rd files with duplicated alias 'show': vì có nhiều hơn một lớp mở rộng để show trong gói này, và roxygen2 đã tự động thêm vào generic hạn trong danh sách các bí danh cho tất cả các *-class.Rd file liên quan:

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

Nhưng tôi nghĩ rằng tôi không muốn bí danh chung trong bất kỳ trường hợp, bởi vì nó sẽ buộc các nhu cầu về định hướng giữa show trong tôi gói và cơ số show. Vấn đề này cũng áp dụng cho các phương pháp S4 khác được mở rộng từ các gói khác ngoài show.

Nếu tôi gắn thẻ tất cả các phương thức cụ thể theo lớp vào cùng một tệp .Rd, thì cảnh báo sẽ biến mất, nhưng sự mơ hồ vẫn còn, vì bí danh show vẫn được thêm tự động cho mục nhập tài liệu đó. Nếu tôi xóa thủ công \alias{show} từ tệp .Rd thì sự cố có vẻ đã được giải quyết, không có cảnh báo nào trong roxygen hoặc R CMD check pkgname. Vậy làm cách nào để Roxygen2 không thêm bí danh chung?

nền khác:

Đây là một tòa nhà câu hỏi cụ thể từ một vấn đề trước đó cho xuất khẩu/tài liệu phần mở rộng S4 với các phương pháp cơ bản: Is it necessary to export base method extensions in an R package? Documentation implications?

Đó là cụ thể hơn, và không thuộc phạm vi, sau đây thắc mắc về phương pháp chủ tài liệu S4/classes sử dụng Roxygen2:

How to properly document S4 methods using roxygen2

How to properly document S4 class slots using Roxygen2?

+2

Gửi báo cáo lỗi. – hadley

+0

https://github.com/klutometis/roxygen/issues/75 Không chắc chắn nếu điều này chỉ áp dụng cho S4. Đã không được thử nghiệm trên Generics S3. –

+1

Lỗi này vẫn tồn tại trong phiên bản 2.2.2 trên CRAN (bình luận thêm vào vấn đề trên github). Nó được cố định trong chi nhánh S4, nhưng cái đó dường như không hoạt động trong hai năm qua. Nó chắc chắn không cố định trên CRAN. –

Trả lời

2

vẻ được cố định trong roxygen2_3.1.0:

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

tạo ra myPkgSpClass-class.Rd:

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

Như Hadley nói, bạn không cần nữa để thiết lập một cách rõ ràng bí danh hoặc tên thứ, ví dụ:

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

sẽ tạo ra 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 
} 

Lưu ý rằng trong trường hợp đó, bạn phải đặt mô tả. Nó sẽ không tạo ra một trang doc nếu mục tài liệu trống.

+2

Bạn không cần chỉ định bí danh hoặc rdname. – hadley

+0

@hadley thật tuyệt vời! ... Karl Forner, bạn có thể sửa đổi câu trả lời của bạn để phản ánh sự điều chỉnh của Hadley, và xác minh nó vẫn còn cung cấp cho các Rd mà bạn đã hiển thị? –