2010-02-17 24 views
45

Todo,Organizador R Fuente Código

estoy empezando a escribir código R orientado a objetos para la primera vez y prevé tener varios archivos de I con dependencias en el medio. Soy nuevo en R y aún no he escrito nada fuera de un solo guión masivo para probar ideas. ¿Hay recursos en línea que dan consejos sobre cómo se debe organizar el código? A falta de descripciones sobre cómo crear paquetes, no puedo encontrar tal orientación. En este punto, solo quiero organizar el código de tal forma que haga que cargar e interactuar con la colección de rutinas sea lo más sencillo posible.

Apreciar cualquier orientación que pueda proporcionar.

Chris

+2

Posible duplicado: http://stackoverflow.com/questions/1266279/how-to-organize-large-r-programs – Shane

Respuesta

41

Esta pregunta está muy relacionada con: "How to organize large R programs?"

Usted debería considerar la creación de un paquete de R. Puede usar la función package.skeleton para comenzar dado un conjunto de archivos R. También recomiendo utilizar roxygen para documentar el paquete al principio, porque es mucho más difícil hacerlo después del hecho.

Lea "Writing R Extensions". El libro en línea "Estadísticas con R" tiene a section on this subject. También echa un vistazo a Creating R Packages: A Tutorial por Friedrich Leisch. Por último, si está en Nueva York, venga a la próxima reunión del grupo NY use-R en "Authoring R Packages: a gentle introduction with examples".

Sólo hacer un refrito de algunas sugerencias sobre buenas prácticas:

  • Un paquete le permite utilizar R CMD check que es muy útil en la detección de errores; por separado puede mirar usando el paquete codetools.
  • Un paquete también te obliga a hacer una cantidad mínima de documentación, lo que lleva a mejores prácticas a largo plazo.
  • También debería considerar realizar pruebas unitarias (por ejemplo, con RUnit) si desea que su código sea robusto/mantenible.
  • Debería considerar usar una guía de estilo (por ejemplo, Google Style Guide).
  • Use un sistema de control de versiones desde el principio, y si va a hacer que su código sea de código abierto, entonces considere usar github o r-forge.

Editar:

En cuanto a ¿cómo hacer cambios incrementales sin volver a generar e instalar el paquete completo: me parece la más sencilla de hacerlo es hacer cambios en el archivo de R pertinente y luego utilizar el comando source para cargar esos cambios Una vez que cargue su biblioteca en una sesión R, siempre será menor en el entorno (y con menor prioridad) que .GlobalEnv, por lo que primero se usarán los cambios que origine o cargue directamente (use el comando search para ver esta). De esta forma, puede tener su paquete subyacente y está sobrescribiendo los cambios a medida que los prueba en el entorno.

Alternativamente, puede usar un IDE como StatET o ESS. Hacen que cargar líneas individuales o funciones de un paquete R sea muy fácil. StatET está especialmente bien diseñado para administrar paquetes en una estructura tipo directorio.

+0

Gracias Shane. Exactamente la guía que estaba buscando. – Chris

+1

Así que aquí hay otra pregunta que surgió en la discusión SO a la que hizo referencia que no recibió respuesta. A medida que modifica/agrega código al paquete en desarrollo, ¿cómo vuelve a cargar el contenido del paquete sin pasar por una instalación? ¿Hay una manera conveniente? Solo estoy tratando de controlar el ciclo que está pasando mientras escribe código y prueba. – Chris

+3

Observe la función "sourceDir" que se encuentra en la sección de ejemplo del archivo de ayuda para la función "fuente" (escriba "? Source" en el indicador R commnand). Tengo una función muy similar en mi archivo ~/.Rprofile, y sourceDir() el directorio mypackage/R del paquete que estoy creando a medida que realizo cambios en él. De vez en cuando reinstalaré el paquete, pero me resulta más fácil hacer cambios incrementales sin que desaparezca el trabajo actual que tengo en el intérprete. –

0

esto es para beneficio de otros que se dirigen a esta publicación en su búsqueda. Yo también enfrenté exactamente el mismo escenario y no encontré ningún recurso que lo explicara claramente. Aquí está mi intento de poner la solución en unos pocos pasos simples:
1) Crear un nuevo directorio del proyecto
2) crear un paquete a través de estudio de R (el mismo proceso que el anterior)
3) Mantener tanto en mismo lugar (para evitar confusión).
4) Instalar y cargar paquetes: devtools yy roxygen2.
5) use la función load_all().

Y listo.

+0

¿cuál es la función '' 'load_all()' ''? –

+0

load_all carga un paquete. Simula aproximadamente lo que sucede cuando un paquete está instalado y cargado con la biblioteca –