2011-10-13 18 views
6

Estoy desarrollando un paquete que proporciona una clase S3 llamada "Foo". También proporciona un método "como" para forzarlo a la clase S4 (de otra persona) denominada "Barra". Mi código es el siguiente:Documentando setAs() y setOldClass() con Roxygen

#' ... 
setOldClass("Foo") 

#' ... 
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
    # do stuff and return a SpatialPointsDataFrame 
}) 

edición He intentado esto:

#' ... 
#' @name as 
#' @export 
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
    # do stuff and return a SpatialPointsDataFrame 
}) 

pero luego me sale esto desde R CMD VERIFICACIÓN:

comprobar si el espacio de nombres se puede cargar con dependencias establecidas ... ADVERTENCIA Error en el espacio de nombresExport (ns, exports): exportaciones no definidas: como Llamadas: loadNamespace -> namespaceExport se detuvo la ejecución

Un espacio de nombres debe ser capaz de ser cargado con sólo el espacio de nombres de conexión en la base: de lo contrario, si el espacio de nombres se carga por un objeto guardado, la sesión no podrá comenzar.

Probablemente algunas importaciones deben declararse en el archivo NAMESPACE.

en un archivo .R separada, que tienen:

#' @importClassesFrom sp SpatialPointsDataFrame 

estoy usando el paquete devtools de Hadley, así que supongo que es roxygen2. Esto es lo que hago:

R> document("MyPackage") 
+0

paquete devtools de hadley. editado para mostrar el mejor intento. – dholstius

+0

Nice edit. Me sorprendería si esto no se responde muy pronto. –

Respuesta

5

El analizador roxygen2 no analizaba setOldClass() y setAs(). Necesitamos obtener las etiquetas @name apropiadas.

#' "Foo" class 
#' 
#' @name Foo-class 
#' @aliases Foo 
#' @family Foo 
#' 
#' @exportClass Foo 
setOldClass("Foo") 

#' As("Foo", "SpatialPointsDataFrame") 
#' 
#' @name as 
#' @family Foo 
#' 
#' @importClassesFrom sp SpatialPointsDataFrame 
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
    # do stuff and return a SpatialPointsDataFrame 
}) 

No sé acerca de la función setAs() en detalle, pero la función as() se carga desde el paquete métodos. Entonces, creo que no necesitamos la entrada export(as) en NAMESPACE.

+0

No es realmente un pro roxygen, y esta pregunta es bastante antigua, pero ... 'setAs()' crea un método sobre 'coerción', con la firma' coerción, Foo, SpatilPointsDataFrame', por lo que te gustaría '@name coerce 'y probablemente' @aliases forzar, Foo, SpatilPointsDataFrame-method'. Te gustaría '@exportMethods coerce' para hacer esto público. –

Cuestiones relacionadas