importfrom example data r roxygen

example - roxygen2 documentation data



¿Cómo documentar correctamente un método S3 de un genérico de un paquete diferente, utilizando Roxygen? (2)

Estoy escribiendo un paquete que define una nueva clase, topógrafo y un método de print para esto, es decir, print.surveyor . Mi código funciona bien y uso roxygen para la documentación en línea. Pero R CMD check emite una advertencia:

Funciones / métodos con uso en el objeto de documentación ''print.surveyor'' pero no en código: print

He utilizado las siguientes dos páginas, escritas por Hadley, como inspiración: Funciones de Namespaces y Documentación , que establecen que la sintaxis correcta es @method function-name class

Entonces mi pregunta es: ¿Cuál es la forma correcta de documentar el método de print para mi nueva clase usando Roxygen? Y más específicamente, ¿cómo me deshago de la advertencia?

Aquí está mi código: (La documentación comentada indicó intentos de arreglar esto, ninguno de los cuales funcionó).

#'' 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) }

Y la salida roxygenizada, es decir 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}}


Actualizar

A partir de roxygen2> 3.0.0, el paquete se ha vuelto mucho más inteligente para entender todo esto. Ahora solo necesita la etiqueta @export y roxygen resolverá qué tipo de cosas está documentando y hará lo correcto al escribir el NAMESPACE etc., durante la conversión.

Hay excepciones en las que es posible que necesite ayudar a roxygen . Un example que utiliza Hadley Wickham en su libro de R Paquetes es all.equal.data.frame . Hay ambigüedad en el nombre de esa función en cuanto a qué es la clase y cuál es la función genérica ( all , all.equal , o all.equal.data )?

En tales casos, puede ayudar a roxygen informando explícitamente el genérico y clase / método, por ejemplo

@method all.equal data.frame

La respuesta original a continuación explica más sobre el comportamiento anterior si necesita usar explícitamente @method .

Original

La función debe estar documentada con la etiqueta @method :

#'' @method print surveyor

En la lectura inicial, el documento de @ hadley fue un poco confuso para mí, ya que no estoy familiarizado con roxygen , pero después de varias lecturas de la sección, creo que entiendo la razón por la cual necesita @method .

Está escribiendo la documentación completa para el método de print . @S3method está relacionado con NAMESPACE y organiza el método para exportar. @S3method no está diseñado para documentar un método.

Su archivo Rd debe tener lo siguiente en la sección de usage :

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

si esto funciona correctamente, ya que esa es la forma correcta de documentar los métodos S3 en los archivos Rd.


A partir de roxygen2> 3.0.0., Solo necesitas @export porque roxygen puede deducir que print.surveyor es un método S3. Esto significa que ahora solo necesitas

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

Sin embargo, en este caso, dado que la documentación no es muy útil, probablemente sería mejor hacerlo:

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