Для документування класів з роксигеном (2), вказівка назви та опису / деталей, схоже, є такими ж, як і для функцій, методів, даних тощо. Однак слоти та успадкування є власним видом тварини. Яка найкраща практика - поточна чи запланована - для документування класів S4 в roxygen2?
Належна старанність:
Я знайшов згадку про @slot
тег у ранніх описах роксигену.
Повідомлення у списку розсилки R-Forge 2008 року,
схоже, вказує на те, що це мертве, і немає підтримки @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), в тому , що немає ніяких @
-delimited тегів і слоти можуть йти без документів, без заперечень з боку roxygenize()
. Це також нічого не говорить про послідовний спосіб документування успадкування визначеного класу. Я думаю, що залежність, як правило, добре працює (якщо певний слот вимагає не базовий клас з іншого пакету) за допомогою @import
тегу.
Отже, підсумовуючи, яка сучасна найкраща практика щодо слотів для Roxygen (2)?
Наразі є три варіанти, які слід розглянути на даний момент:
- A - Деталізований список (як приклад вище).
- Б -
@slot
... але з додатковими тегами / реалізацією я пропустив. Мені не вдалося змусити @slot працювати з roxygen / roxygen2 у версіях, де він був включений як заміна для деталізованого списку у наведеному вище прикладі. Знову ж, приклад, наведений вище, працює з роксигеном (2).- C - якийсь альтернативний тег для визначення слотів, як-от
@param
, який би виконував те саме.
Я запозичую / поширюю це питання з посади, яку я зробив на сторінці roxygen2
розробки на github .
setClass
тверджень, ніж setMethod
. Здійснення змін як тільки @slot
буде здійснено, не буде занадто болючим.
@slot
це, мабуть, те, що ви хочете довгостроково, але це має бути реалізовано спочатку ...