2010-10-29 12 views
8

Estoy desarrollando un paquete en RAl desarrollar un paquete R, ¿tengo que volver a compilar el paquete cada vez que realizo un cambio?

Cuando estoy depurando una determinada función o conjunto de funciones, ¿cuál es la mejor manera de probar la función?

¿Tengo que usar source ('function.R') o R CMD build cada vez que quiero verificar mis cambios?

(crédito adicional para emacs asociados ess atajos de teclado)

+0

Crédito adicional para emacs + ess ... demasiado malo Dirk acaba de salir para el tren. –

Respuesta

8

Consulte también http://github.com/hadley/devtools/ que proporciona algunas herramientas para facilitar esta tarea.

por ejemplo, después de hacer cambios al código fuente, a construir, instalar, y volver a cargar un paquete con la función install():

library(devtools) 
install("package_name") 

devtools también hace que sea más fácil:

  • Recargar paquete completo:

    load_all("pkg") 
    
  • Crear o actualizar d OCUMENTACIÓN usando roxygen2

    document("pkg") 
    
  • ejecución de todos los scripts en /inst/test/:

    test("pkg") 
    
  • construcción y verificación de R CMD:

    check("pkg") 
    
+0

Ahora que me estoy familiarizando, veo que devtools hace que la vida sea mucho más fácil y el desarrollo más eficiente. ¡Gracias! –

5

Tome un vistazo a ?insertSource, que es una nueva función en R 2.12.0, además de las otras funciones en la sección Vea también de que la página de ayuda. Además, consulte ?assignInNamespace si su paquete tiene un espacio de nombres.

Lo anterior supone que está hablando de actualizar y depurar fuentes R, no código compilado.

por lo general he utilizado la ruta source() para cargar nuevas versiones de las funciones que estoy mejorando/depuración, junto con las herramientas habituales R depuración. Pero aún no tengo Namespaces en mis paquetes. Mis dedos se han acostumbrado bastante a la combinación de teclas C-c C-l en emacs + ess para obtener una memoria intermedia a lo largo de los años.

+0

Gracias por su respuesta: Cc Cl es útil, pero solo para tener en cuenta para otros, al usar esto en un servidor (en modo ess-remote), la ruta del archivo comienza con ~/pkg/R/fn.R en lugar de/server : pkg/R/fn.R aunque cuando escribo el archivo, es a la/server: .. ubicación si no uso la ubicación del servidor, obtengo el error: no puedo abrir el archivo '/ ssh: server/inicio/usr/pkg/R/function.R '¿has notado esto? –

+0

@David: lo siento, mi emacs + ess fu es débil. Nunca lo he usado de la manera que estás describiendo. (Supongo que no está editando la versión local y esperando que ESS sepa de alguna manera dónde está el archivo en el servidor). Sugiera que haga lo anterior como una nueva pregunta aquí, donde obtendrá más ojos que un desarrollo de paquete Q sobre R . –

+0

esta fue una gran respuesta, pero ahora que estoy tomando el truco de devtools, diría que es la mejor solución al problema, así que he actualizado y seleccionado [la respuesta de Hadley] (http://stackoverflow.com/a/4061424/199217). –

5

Es posible que desee echar un vistazo a la paquete 'mvbutils' Lo uso para editar en vivo mis paquetes todo el tiempo; Puedo agregar, eliminar y editar funciones y documentación mientras el paquete está cargado, y los cambios se reflejan tanto en la versión cargada, en la versión instalada (para que se guarden en la próxima sesión R), y [cuando digo it] en el "paquete fuente". Solo vuelvo a construir a través de R CMD cuando quiero distribuir una versión comprimida a otra persona. Para probar el código, utilizo el paquete 'debug', que funciona bien en un paquete cargado.

Incluso uso 'mvbutils' para editar en vivo 'mvbutils', que a veces puede ser un poco peludo.

La documentación de 'mvbutils' realmente podría hacer una demostración completa de esto en acción, pero en teoría el doco existente debería mostrarle cómo proceder.

No puedo ayudarte con Emacs, lo siento ...

+0

Este es un paquete excelente, gracias. Hace poco estuve muy contento de encontrar 'foodweb', que fue de gran ayuda para encontrar dependencias en mi código. – Iterator

1

había conseguido el mismo problema y me lo resolvieron durante el uso de rstudio.

En el editor, marque la opción "Fuente al guardar" para mi archivo R que contiene la función. Como estoy acostumbrado a guardar mi archivo cada vez que lo edito (un buen hábito, creo), las funciones correspondientes cargadas en mi espacio de trabajo R siempre están actualizadas.

Cuestiones relacionadas