2010-12-09 15 views
16

a continuación se publicó un mini ejemplo en el que quiero escribir documentación para un "[" método para una clase S4. ¿Alguien sabe cómo documentar adecuadamente un método para el genérico "[" usando roxygen y S4? Recibo una advertencia cuando reviso el paquete después de la construcción (ver a continuación).¿Cómo documentar correctamente los métodos S4 "[" y "[<-" usando roxygen?

#' An S4 class that stores a string. 
#' @slot a contains a string 
#' @export 
setClass("testClass", 
     representation(a="character")) 

#' extract method for testClass 
#' 
#' @docType methods 
#' @rdname extract-methods 
setMethod("[", signature(x = "testClass", i = "ANY", j="ANY"), 
     function (x, i, j, ..., drop){ 
      print("void function") 
     } 
) 

Extracto de verificación del paquete:

  • la comprobación de falta de documentación entradas ... ADVERTENCIA métodos indocumentado S4: Todos los objetos de nivel de usuario genéricos '[' y siglist 'TestClass' en un paquete (incluidas las clases y métodos S4) debe tener entradas de documentación. Consulte el capítulo "Escritura de archivos de documentación R" en el manual "Escritura de extensiones R ".

Gracias de antemano, Marcos

Respuesta

6

A partir de roxygen2> 3.0.0, ya no necesita soluciones alternativas y solo necesita:

#' Extract parts of testClass. 
#' 
setMethod("[", signature(x = "testClass", i = "ANY", j="ANY"), 
    function (x, i, j, ..., drop){ 
    print("void function") 
    } 
) 
+1

Cuando ejecuto esto a través de roxygen2 4.0.1 recibo lo siguiente de R CMD check: 'ADVERTENCIA Argumentos no documentados en el objeto de documentación '[, testClass-method' 'j' '...' Funciones con \ entradas de uso necesita tener las entradas apropiadas \ alias , y todos sus argumentos documentados. – azvoleff

+0

@azvoleff envíe un informe de error con un ejemplo reproducible en https://github.com/klutometis/roxygen/issues – hadley

+0

Listo - vea https: // github.com/klutometis/roxygen/issues/272 – azvoleff

10

finalmente averigüé más o menos. Al menos funciona ahora:

#' An S4 class that stores a string. 
#' @slot a contains a string 
#' @export 
setClass("testClass", 
    representation(a="character")) 

#' extract parts of testClass 
#' 
#' @name [ 
#' @aliases [,testClass-method 
#' @docType methods 
#' @rdname extract-methods 
#' 
setMethod("[", signature(x = "testClass", i = "ANY", j="ANY"), 
    function (x, i, j, ..., drop){ 
     print("void function") 
    } 
) 
7

Por lo que vale la pena, en el caso de una función de reemplazo, usted querrá algo como lo siguiente:

#' An S4 class that stores a list. 
#' @export 
    setClass("testClass", 
     representation(a="list")) 

#' extract parts of testClass 
#' 
#' @name [ 
#' @aliases [,testClass-method 
#' @docType methods 
#' @rdname extract-methods 
setMethod("[", signature(x = "testClass", i = "ANY", j="ANY"), 
    function (x, i, j, ..., drop) { 
    [email protected][i] 
    } 
) 

#' replace names of testClass 
#' 
#' @name [ 
#' @aliases [<-,testClass-method 
#' @docType methods 
#' @rdname extract-methods 
setReplaceMethod("names", signature(x = "testClass", value = "ANY"), definition = function (x, value) { 
    names([email protected]) <- value 
    x 
}) 
+2

Muchas gracias, @name es la clave aquí; de lo contrario, aparece el error 'missing name in block'. Eso resuelve el problema. –

Cuestiones relacionadas