Mi grupo ha estado desarrollando un paquete R para simular el crecimiento de las plantas (ver el repositorio de GitHub ). El paquete R se usa .Call
para interactuar con C.
Hemos decidido que valdría la pena crear una biblioteca C independiente. Las dos razones clave son 1) usar herramientas de depuración de C familiares y 2) una gran parte de la comunidad de desarrolladores / usuarios está familiarizada con lenguajes compilados (la mayoría de los modelos de la clase están escritos en C o Fortran). Sin embargo, el paquete R es accesible para muchos fuera de esta comunidad, por lo que queremos mantener su funcionalidad.
He revisado algunas preguntas relacionadas, por ejemplo, https://stackoverflow.com/q/12328156/199217 , que discuten los paquetes R con las dependencias de la biblioteca C, pero no he encontrado una que se ocupe específicamente de desacoplar un paquete R existente.
Un enfoque propuesto
(lo que se nos ocurrió hasta ahora ... un hombre de paja)
- Escribir pruebas para la funcionalidad existente
- mantener la biblioteca C dentro de la
src/
carpeta - Coloque el código C específico de R (p
SEXP
. Ej. , Cargando bibliotecas R, etc.) en archivos 'R wrapper' antepuestos conR_*
- crear funciones separadas para leer archivos de configuración en C
- crear una función 'principal' C para reemplazar la funcionalidad en R
- escribir un archivo MAKE para la biblioteca C que ignora los archivos de contenedor R
- Una vez que la biblioteca C funciona de manera independiente y equivalente al paquete R, podríamos considerar mover las funciones C a un repositorio separado, eso sería una dependencia para el paquete R
Preguntas:
- ¿Es este esfuerzo equivocado?
- ¿Estamos pasando por alto posibles peligros?
- ¿Hay una mejor manera de desarrollar las bibliotecas R y C en paralelo?
- ¿Hay algún ejemplo de bibliotecas C que se hayan desacoplado de paquetes R?
- ¿Cómo podríamos escribir pruebas para comparar funciones equivalentes en R y C?