Для документирования классов с помощью roxygen (2) указание заголовка и описания / деталей похоже на то же самое, что и для функций, методов, данных и т. Д. Однако слоты и наследование - это своего рода животные. Какая лучшая практика - текущая или планируемая - для документирования классов S4 в roxygen2?
Юридическая экспертиза:
Я нашел упоминание о теге @slot
в ранних описаниях roxygen. Сообщение из списка рассылки R-forge 2008 года, похоже, указывает на то, что он мертв, и в roxygen нет поддержки @slot
:
Это верно для roxygen2? Ранее упомянутый пост предлагает пользователю вместо этого создать свой собственный список с разметкой LaTeX. Например. новый класс S4, расширяющий класс "character"
, будет закодирован и задокументирован следующим образом:
#' The title for my S4 class that extends \code{"character"} class.
#'
#' Some details about this class and my plans for it in the body.
#'
#' \describe{
#' \item{myslot1}{A logical keeping track of something.}
#'
#' \item{myslot2}{An integer specifying something else.}
#'
#' \item{myslot3}{A data.frame holding some data.}
#' }
#' @name mynewclass-class
#' @rdname mynewclass-class
#' @exportClass mynewclass
setClass("mynewclass",
representation(myslot1="logical",
myslot2="integer",
myslot3="data.frame"),
contains = "character"
)
Однако, хотя это работает, этот \describe
, \item
подход к документированию слотов кажется несовместимым с остальной частью roxygen (2), поскольку отсутствуют теги с разделителями @
, и слоты могут остаться недокументированными без возражений со стороны roxygenize()
. В нем также ничего не говорится о последовательном способе документирования наследования определяемого класса. Я полагаю, что зависимость по-прежнему работает нормально (если конкретный слот требует небазового класса из другого пакета) с использованием тега @import
.
Итак, чтобы подвести итог, какова в настоящее время лучшая практика для слотов roxygen (2)?
На данный момент, похоже, есть три варианта, которые следует рассмотреть:
- A - Детализированный список (как в примере выше).
- B -
@slot
... но с лишними тегами / реализацией я пропустил. Мне не удалось заставить @slot работать с roxygen / roxygen2 в версиях, где он был включен в качестве замены детализированного списка в приведенном выше примере. Опять же, приведенный выше пример действительно работает с roxygen (2).- C - Альтернативный тег для указания слотов, например
@param
, который выполняет то же самое.
Я заимствую / расширяю этот вопрос из сообщения, которое я опубликовал на roxygen2
странице разработки на github.
@slot
- это, вероятно, то, что вы хотите в долгосрочной перспективе, но сначала это должно быть реализовано ... - person hadley   schedule 14.09.2011setClass
операторов, чемsetMethod
. Внесение изменений после того, как@slot
будет реализовано, не будет слишком болезненным. - person Paul McMurdie   schedule 15.09.2011