Подтвердить что ты не робот

Как правильно документировать метод S3 общего типа из другого пакета, используя Roxygen?

Я пишу пакет, который определяет новый класс, геодезист и метод print для этого, т.е. print.surveyor. Мой код работает отлично, и я использую roxygen для встроенной документации. Но R CMD check выдает предупреждение:

Функции/методы с использованием в объект документации 'print.surveyor' но не в коде: print

Я использовал следующие две страницы, написанные Хэдли, как вдохновение: Namespaces и Функции документирования, в которых указано, что правильный синтаксис @method function-name class

Итак, мой вопрос: каков правильный способ документирования метода print для моего нового класса с использованием Roxygen? И, более конкретно, как мне избавиться от предупреждения?


Вот мой код: (Прокомментированная документация указала на попытки исправить это, ни одно из которых не сработало.)

#' Prints surveyor object.
#' 
#' Prints surveyor object
#' 
## #' @usage print(x, ...)
## #' @aliases print print.surveyor
#' @param x surveyor object
#' @param ... ignored
#' @S3method print surveyor
print.surveyor <- function(x, ...){
    cat("Surveyor\n\n")
    print.listof(x)
}

И роксигенизированный выход, т.е. print.surveyor.Rd:

\name{print.surveyor}
\title{Prints surveyor object.}
\usage{print(x, ...)
#'}
\description{Prints surveyor object.}
\details{Prints surveyor object

#'}
\alias{print}
\alias{print.surveyor}
\arguments{\item{x}{surveyor object}
\item{...}{ignored}}
4b9b3361

Ответ 1

Как и для roxygen2 > 3.0.0., вам нужно только @export, потому что roxygen может понять, что print.surveyor - это метод S3. Это означает, что вам теперь нужно только

#' Prints surveyor object.
#' 
#' @param x surveyor object
#' @param ... ignored
#' @export
print.surveyor <- function(x, ...){
    cat("Surveyor\n\n")
    print.listof(x)
}

Однако, в этом случае, поскольку документация не очень полезна, лучше было бы просто сделать:

#' @export
print.surveyor <- function(x, ...){
    cat("Surveyor\n\n")
    print.listof(x)
}

Ответ 2

Update

Как и в случае с roxygen2 > 3.0.0, пакет получил намного более умный способ понять все это для вас. Теперь вам просто нужен тег @export и roxygen что вы документируете и делаете подходящую вещь при записи NAMESPACE и т.д. во время преобразования.

Существуют исключения, в которых вам может понадобиться помощь roxygen. Пример , который использует Хэдли Уикхэм в своей книге R Packages all.equal.data.frame. В этом имени функции есть неопределенность относительно того, что является классом, и какова общая функция (all, all.equal или all.equal.data)?

В таких случаях вы можете помочь roxygen, явно проинформировав его об общем и классе/методе, например

@method all.equal data.frame

В первоначальном ответе ниже подробно объясняется более старое поведение, если вам нужно явно использовать @method.


Оригинальные

Функция должна быть документирована тегом @method:

#' @method print surveyor

При первоначальном чтении документ @hadley немного смущал меня, поскольку я не знаком с roxygen, но после нескольких чтений раздела я думаю, что понимаю, почему вам нужно @method.

Вы пишете полную документацию для метода print. @S3method связан с NAMESPACE и упорядочивает способ экспорта. @S3method не предназначен для документирования метода.

В разделе usage ваш Rd файл должен иметь следующее:

\method{print}{surveyor}(x, ...)

если это работает правильно, так как это правильный способ документировать методы S3 в файлах Rd.