Каков рекомендуемый рабочий процесс сборки пакета с пакетами, которые содержат классы S4?

Возможный дубликат:
Как правильно документировать слоты класса S4 с помощью Roxygen2

Я хотел бы создать пакет, содержащий S4 classes, используя R Studio и roxygen2. Я уже документировал все свои функции, используя синтаксис roxygen2, когда я ввел пару S4 classes в мой пакет.

Теперь я понял, что нет функциональности "@slot" из коробки. Поэтому мне интересно, как я могу сохранить всю мою документацию для других функций и документировать S4 classes вручную, как это предлагается в этой теме?

Или, другими словами, какой рабочий процесс вы бы рекомендовали создать пакет, содержащий как старые школьные функции, так и S4 classes?

РЕДАКТИРОВАТЬ: Вы бы посоветовали настроить R Studio, чтобы не создавать файлы .Rd. roxygenize вручную, а затем добавить информацию позже? Тем не менее это приведет к перезаписи созданных вручную файлов .Rd классов...

Ответ 1

Общая информация о классах roxygen и S4

Первая версия roxygen имела тег @slot, но эта версия больше не поддерживается в пользу roxygen2. Поэтому он не рекомендовал использовать эту старую версию.

Пока что roxygen2 не имеет реальной поддержки для классов S4. Хэдли прилагает все усилия, чтобы это произошло в roxygen3 (https://github.com/hadley/roxygen3). Если вы хотите сделать снимок и почувствовать себя храбрым: установите roxygen3 из github и попробуйте версию для разработки. Обратите внимание, что эта версия в конечном итоге будет включена в roxygen2, поэтому со временем проблема решится сама.

Что касается вашего рабочего процесса:

Мне лично всегда сложно сочетать использование roxygen и вручную написанных файлов .Rd. Но если вам нужно, вы можете отправить вывод roxygen в другой каталог, используя аргумент roxygen.dir. Таким образом, вы можете скопировать все, что захотите, в каталог пакета, не перезаписывая записанные вручную файлы.

roxygenise("./mypackage", roxygen.dir="./myroxygendir")

Что бы я сделал, просто используйте roxygen2 для записи файлов Rd для ваших классов, как описано в потоке, на который вы ссылаетесь. Вам не нужно добавлять их вручную, как вы верите по неизвестной причине. Вы просто используете #', чтобы указать Rd-блок, как всегда, и использовать все, что указано в потоке, к которому вы ссылаетесь. Если вы хотите сделать слоты отдельным разделом, вы можете сделать это с помощью тега @section, как в приведенном ниже примере.

Пример того, как добавить слоты на данный момент, используя roxygen2:

#' The MY class
#'
#' This class blabla yadayada
#'
#'@section Slots:
#'  \describe{
#'    \item{\code{aslot}:}{Object of class \code{"numeric"}, containing 
#'whatever and a bit more}
#'    \item{\code{anotherslot}:}{Object of class \code{"character"}, containing
#' strings.}
#'  }
#'
#' @note Yes, you can add notes
#' @name MY 
#' @rdname MY
#' @aliases MY-class
#' @exportClass MY
#' @author Joris Meys
setClass("MY",
         representation=representation(aslot="numeric",
                                       anotherslot="character"
                                       )