Gestión de activos externos en el paquete R

2 minutos de lectura

avatar de usuario
Ramnat

Estoy escribiendo un paquete R llamado slidify lo que facilita la generación de diapositivas HTML5 reproducibles a partir de archivos R Markdown. El paquete hace uso de css y js archivos de varios marcos de generación de diapositivas HTML5 existentes como dzslides, deck.js etc. Actualmente, he organizado las versiones descargadas de estos activos externos en el inst/libraries carpeta de slidify, para que esté automáticamente disponible para los usuarios al momento de la instalación. Si bien este enfoque es simple, hay algunas desventajas:

  1. Estos marcos se actualizan constantemente en github. Con la configuración actual, tendría que enviar una nueva versión del paquete cada vez que se actualice alguno de estos marcos.

  2. Si hago algún ajuste al valor predeterminado css y js que vienen con estos marcos, entonces necesito fusionar las actualizaciones con cuidado para no perder slidify personalizaciones específicas.

Tuve un par de pensamientos sobre cómo manejar esto.

  1. No empaquete estas bibliotecas con slidify. En su lugar, proporcione un function que permitiría a los usuarios agregar los marcos que deseen.

  2. Agregue estos marcos al inst\libraries carpeta en slidifypero como submodules. Ahora, no tengo idea si agregarlos como submodules los instalaría si alguien usara devtools::install_github.

Entonces, mi pregunta es, al escribir un paquete R, ¿cómo puedo administrar las dependencias externas que no son R que se actualizan constantemente?

  • Me gusta mucho tu pregunta; modificó la redacción al final para evitar votos “no constructivos”.

    – Jorán

    3 de julio de 2012 a las 15:37

  • Gracias por la edición. Hace que la pregunta sea más clara.

    – Ramnat

    3 de julio de 2012 a las 15:40

  • Una posibilidad es mirar paquetes xlsx y XLConnect. Ambos dependen de las bibliotecas de Java. xlsx define (y depende de) un paquete independiente xlsxjars que solo contiene las bibliotecas. De esta forma, el código descendente se desacopla de las bibliotecas.

    – Andrie

    3 de julio de 2012 a las 15:51

  • Gracias Andri! Lo investigaré.

    – Ramnat

    3 de julio de 2012 a las 16:03

  • Congelar la versión de las dependencias junto con la versión del paquete parece ser la forma más segura. En caso de que uno de los paquetes cambie sustancialmente, su paquete aún puede funcionar sin tener que apresurarse mucho para arreglar las dependencias rotas. También es mejor no sobrescribir los archivos de dependencia, sino sobrecargarlos y cargarlos después de los originales, lo que hace que las cosas sean más manejables.

    – Hansi

    3 de julio de 2012 a las 16:55

Una situación análoga es mirar los paquetes xlsx y XLConnect.

Ambos paquetes dependen de las bibliotecas de Java. xlsx define (y depende de) un paquete independiente xlsxjars que solo contiene las bibliotecas.

De esta forma, el código descendente se desacopla de las bibliotecas.

avatar de usuario
Xyand

Resolví un problema similar usando git-subtree. Eche un vistazo a: Administración de fuentes y binarios de terceros utilizados por código bajo control de fuente

¿Ha sido útil esta solución?