roxygen homestuck
¿Por qué roxygen2 no actualiza automáticamente "Importaciones" en el archivo de DESCRIPCIÓN? (3)
Con respecto a las dos balas sobre las que te preguntas al final:
- Las actualizaciones del archivo de DESCRIPCIÓN se podrían automatizar aún más con roclets adicionales, sin embargo, hace ya más de 4 años que se aplazó dicha solicitud de extracción: https://github.com/klutometis/roxygen/pull/76
- Debo suponer que los chicos prefieren que utilices el paquete
devtools
para actualizar el archivo de DESCRIPCIÓN, en lugar de agregarlo aroxygen2
. Así que en ese sentido, losdevtools
serían la primera opción disponible.
Estoy tratando de seguir de cerca el book @ hadley para aprender las mejores prácticas al escribir paquetes R. Y me emocionó leer estas líneas sobre la philosophy del libro:
Cualquier cosa que pueda ser automatizada, debe ser automatizada. Haz lo menos posible a mano. Haz todo lo posible con las funciones.
Entonces, cuando estaba leyendo acerca de las dependencias y las diferencias (más o menos confusas) entre las directivas de importación en el archivo NAMESPACE y el campo "Importaciones:" en el archivo de DESCRIPCIÓN, esperaba que roxygen2
manejara automáticamente. Después de todo
Cada paquete mencionado en NAMESPACE también debe estar presente en los campos Imports o Depends.
Esperaba que roxygen2
tomara todas las @inportes en mis funciones y me asegurara de que estuviera incluido en el archivo de DESCRIPCIÓN. Pero no lo hace automáticamente.
Así que tengo que agregarlo manualmente al archivo de DESCRIPCIÓN o casi manualmente usando devtools::use_package
.
Buscando una respuesta, encontré esta question en SO, donde @hadley confirma en los comentarios que
Actualmente, el espacio de nombres roclet modificará NAMESPACE pero no DESCRIPTION
y otras publicaciones (por ejemplo, here o aquí ) donde se analiza collate_roclet
, pero " Esto solo importa si su código tiene efectos secundarios; más comúnmente porque está usando S4 ".
Me pregunto:
- la razón por la que la DESCRIPCIÓN no se actualiza automáticamente (en
roxygen2
contradice la filosofía mencionada anteriormente, que presumiblemente es compartida porroxygen2
) y - Si alguien ya ha creado una forma de hacerlo.
El namespace_roclet
edita el archivo NAMESPACE
función de las etiquetas agregadas en el script antes de la función. Como hay tres tipos de dependencias ( Depends
, Imports
y Suggests
), un método similar utilizado por namespace_roclet
requeriría tres etiquetas diferentes (el aviso Imports
debe ser diferente, para diferenciarlo de los paquetes que se deben adjuntar en NAMESPACE
).
Si está dispuesto a realizar un proceso semiautomático, puede identificar los paquetes que ha utilizado y agregar los que faltan a la DESCRIPTION
, en las secciones adecuadas.
library(reinstallr)
package.dir <- getwd()
base_path <- normalizePath(package.dir)
files <- list.files(file.path(base_path, "R"), full.names = TRUE)
packages <- unique(reinstallr:::scan_for_packages(files)$package)
packages
He escrito un pequeño paquete R para esa tarea:
https://github.com/markusdumke/pkghelper
Escanea el Código R y NAMESPACE en busca de paquetes en uso y los agrega a la sección Imports
.