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
devtoolspara actualizar el archivo de DESCRIPCIÓN, en lugar de agregarlo aroxygen2. Así que en ese sentido, losdevtoolsserí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
roxygen2contradice 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 .