Как правильно документировать два метода S4 для одного и того же generi c на одной странице справки, используя Roxygen2? - PullRequest
3 голосов
/ 07 января 2020

Я создаю пакет R, используя Roxygen2 для документации. Я хочу реализовать один и тот же метод S4 для каждого из двух классов, которые есть в моей программе. Я не знаю, как правильно настроить документацию для них, чтобы получить одну страницу справки.

Я провел день, пытаясь найти подходящую для него конфигурацию, и я проверил несколько сообщений (например, a , b , c), но я все еще не могу заставить его работать должным образом.

Мои два класса выглядят так:

#' @title Class: Class1
#' @description Description for Class1.
#' @slot x an x.
#' @rdname Class1-class
#' @export
setClass("Class1", representation(x = "numeric"))
#' @title Class: Class2
#' @description Description for Class 2.
#' @slot y a y.
#' @slot z a z.
#' @rdname Class2-class
#' @export
setClass("Class2", representation(y = "numeric", z = "numeric"))

Для обоих классов я хочу реализовать myMethod. Таким образом, следуя предложению этой статьи , я создал фиктивный файл документации, в котором я документирую NULL и настроил информативное @ имя.

Файл фиктивной документации выглядит следующим образом:

#' @title myMethod
#' @description Runs myMethod.
#' @param object an object.
#' @name myMethod
NULL

Попытка 1

Реализация методов выглядит следующим образом:

Для Class1

if(!isGeneric("myMethod")) {setGeneric("myMethod", function(object) standardGeneric("myMethod"))}

#' @rdname myMethod
#' @export
setMethod("myMethod", "Class1", function(object) myMethod.Class1(object))

myMethod.Class1 <- function(object) return(5+object@x)

Для Class2

if(!isGeneric("myMethod")) {setGeneric("myMethod", function(object) standardGeneric("myMethod"))}

#' @rdname myMethod
#' @export
setMethod("myMethod", "Class2", function(object) myMethod.Class2(object))

myMethod.Class2 <- function(object) return(object@y+object@z)

Я могу проверить свою посылку и не получать ошибок, предупреждений или заметок. Однако мне нужна одна справочная страница для myMethod, а приведенная выше структура дает мне две справочные страницы: myMethod и myMethod-method. Обратите внимание, что на единственной странице справки, которую я хочу, я ожидаю также иметь одно общее описание, которое я написал в моем фиктивном файле, а не два объединенных описания.

Я не знаю как следует настроить документацию таким образом, чтобы я получал единственную myMethod справочную страницу.

Попытка 2

В дополнение к описанной выше настройке я пробовал структура, предложенная в этом SO-ответе следующим образом:

для Class1

if(!isGeneric("myMethod")) {setGeneric("myMethod", function(object) standardGeneric("myMethod"))}

#' @rdname myMethod-methods
#' @aliases myMethod,Class1,Class1-method
setMethod("myMethod", "Class1", function(object) myMethod.Class1(object))

myMethod.Class1 <- function(object) return(5+object@x)

для Class2

if(!isGeneric("myMethod")) {setGeneric("myMethod", function(object) standardGeneric("myMethod"))}

#' @rdname myMethod-methods
#' @aliases myMethod,Class2,Class2-method
setMethod("myMethod", "Class2", function(object) myMethod.Class2(object))

myMethod.Class2 <- function(object) return(object@y+object@z)

С этой структурой я получаю один Страница справки с именем myMethod, как я хочу. Тем не менее, я также получаю "myMethod-method.Rd отсутствует имя / заголовок. Пропуск" ошибка во время установки и перезапуска. Нет проблем при проверке. Я не знаю, подходит ли эта структура к go, но чего-то не хватает, чтобы устранить ошибку.

Оцените ваши входные данные!

...