48 votos

Primer código fuente de paquetes R para estudiar en preparación para escribir su propio paquete

Estoy planeando empezar a escribir paquetes de R.

Pensé que sería bueno estudiar el código fuente de los paquetes existentes para aprender las convenciones de la construcción de paquetes.

Mis criterios sobre los buenos paquetes para estudiar:

  • Ideas estadísticas/técnicas simples : Se trata de conocer la mecánica de la construcción de paquetes. La comprensión del paquete no debería requerir un conocimiento detallado y altamente específico sobre el tema real del paquete.
  • Estilo de codificación sencillo y convencional : Estoy buscando algo más que Hello World pero no mucho más. Los trucos y hacks idiosincrásicos podrían distraer cuando se aprenden por primera vez los paquetes de R.
  • Buen estilo de codificación : El código está bien escrito. Revela tanto una comprensión de la buena codificación, en general, como un conocimiento de las convenciones de codificación en R.

Preguntas:

  • ¿Qué paquetes serían buenos para estudiar?
  • Por qué sería bueno estudiar el código fuente del paquete sugerido en relación con los criterios mencionados anteriormente o con cualquier otro criterio que pueda ser relevante?

Actualización (13/12/2010) A raíz de los comentarios de Dirk quería dejar claro que sin duda muchos paquetes serían buenos para estudiar primero. También estoy de acuerdo en que los paquetes proporcionarán modelos para diferentes cosas (por ejemplo, viñetas, clases S3, clases S4, pruebas unitarias, Roxygen, etc.). No obstante, sería interesante leer sugerencias concretas sobre buenos paquetes para empezar y las razones por las que serían buenos paquetes para empezar.

También he actualizado la pregunta anterior para referirme a "paquetes" en lugar de "paquete".

15voto

ebarrera Puntos 107

Sugeriría mirar el zoo paquete por las siguientes razones:

  1. Tiene varias viñetas bien escritas;
  2. Utiliza un espacio de nombres con useDynLib , import , export y S3method ;
  3. Tiene varias pruebas unitarias que utilizan RUnit ;
  4. Proporciona buenos ejemplos de cómo crear/documentar métodos S3;
  5. Tiene algunas llamadas al código C a través del .Call interfaz;
  6. Contiene una demostración (de trazado);
  7. Pretende ser consistente con el núcleo de la instalación de R (por ejemplo, las funciones se comportan de manera similar, no enmascara / anula las funciones base, etc.)

No utiliza roxygen, lo cual es muy útil, pero 7 de 8 no está mal. ;-)

Para responder a sus criterios:

  1. El concepto es sencillo: zoo es una clase matricial ordenada por algo . No es necesario tener conocimientos específicos del sector.
  2. zoo parece tener algunas convenciones de codificación idiosincrásicas, pero nada exagerado que impida entender el código.
  3. zoo pretende ser lo más coherente posible con R.

9voto

Mohit Jain Puntos 412

No me considero un desarrollador de paquetes R establecido, pero recientemente he pasado por el proceso de escribir y mantener un paquete para mi entorno de trabajo.

Anteriormente había estado escribiendo / manteniendo / actualizando un conjunto de scripts que pasaba de proyecto a proyecto a través del source() función. El resultado final de esto fue que terminé con scripts en su mayoría redundantes colgando en varios lugares en nuestras unidades de red. Nunca estaba claro dónde se encontraba el conjunto más actualizado de scripts. Desde entonces he migrado a escribir / mantener un paquete utilizando roxygen. Ha simplificado drásticamente mi vida y ha hecho más fácil compartir mi trabajo con los colegas.

Basándome en sus criterios anteriores, apoyo la recomendación de revisar los paquetes que ha escrito Hadley. En particular, creo que la lectura a través de la wiki de devtools sería muy útil. El código de Hadley está bien documentado y varios de sus paquetes utilizan roxygen. Creo que escribir y mantener un documento para las funciones de R y la documentación de R es mucho más fácil que tenerlos divididos en dos lugares (archivos .R y .RD).

Los paquetes de Hadley también sirven para algunos conceptos bastante básicos y son relativamente fáciles de partir (imho) si usted está buscando punteros en el aspecto técnico ideas. Me encuentro escarbando en el plyr código fuente cuando busco una indicación sobre la documentación de roxygen u otras tareas fundamentales.

7voto

Jay Puntos 395

¿Por qué no adoptar un enfoque de muestreo aleatorio empírico? Elija algunas y vea cuáles le funcionan.

Bromas aparte, basta con mirar algunos paquetes que tú mismo utilices y con los que estés familiarizado. Descargarlos es fácil, o si lo prefieres también puedes verlos a través de una interfaz web en R-Forge, RForge o Github.

Lo más probable es que acabe con diferentes paquetes para diferentes ideas. Algunos pueden ayudarte con la forma de integrar, por ejemplo, una viñeta. Algunos pueden ayudar con el código compilado. O pruebas unitarias. O Roxygen. Hay unos 2.600, así que ¿por qué obsesionarse con uno solo?

2voto

Alexander Gladysh Puntos 682

Otro consejo podría ser mirar los paquetes de los que depende el suyo o con los que interactúa, especialmente si estos implementan algunos artículos Joshua Ulrich mencionados o han sido escritos por autores de renombre. Puede ser útil aprender cómo se hacen las cosas en su campo, para asegurar cierta compatibilidad. A menudo la gente habrá pensado en ciertas cuestiones y leer su solución puede ser útil.

1voto

kaybenleroll Puntos 4086

Yo recomendaría el paquete reshape de hadley. puedes encontrar la fuente en https://github.com/hadley/reshape

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X