2011-02-25 15 views
22

en Python Estoy acostumbrado a tener mi código "verificado por estilo" mediante una herramienta automática pero configurable, llamada pep8, después del 8th Python enhancement proposal.¿Alguna guía/verificador de estilo R?

en R No lo sé. Google tiene un style guide, pero:

  • ¿qué es lo que la mayoría de los programadores R realmente usan?
  • Todavía no encontré ningún programa que realice esos controles.

Dirk, Alex, en sus respuestas que me señaló en impresoras bonitas, pero en mi opinión eso sería exagerar una cosa y no hacer otra: código sería editado automáticamente para seguir el estilo, mientras que no hay advertencias se emiten para identificadores mal elegidos.

+0

Pregunta relacionada: http://stackoverflow.com/questions/4406873/coding-practice-in-r-what-are-the-advantages-and-disadvantages-of-different-sty –

+0

La otra guía de estilo que está disponible es [Henrik Bengtsson's] (https://docs.google.com /document/preview?id=1esDVxyWvH8AsX-VJa-8oqWaHLs4stGlIbk8kLc5VlII&pli=1#heading=h.f456284e7686). Una canónica sería agradable, pero no hay una (y hay muchos desacuerdos entre las existentes) – naught101

+2

Esto podría ser útil: http://cran.r-project.org/web/packages/lint/lint. pdf – wannymahoots

Respuesta

10

Creo que si quiere una herramienta de este tipo, puede que tenga que escribirla usted mismo. La razón es que R no tiene un equivalente a Python's PEP8; es decir, una "guía de estilo oficial" que se ha transmitido desde lo alto y que la mayoría de los programadores R siguen universalmente.

Además, hay muchas inconsistencias estilísticas en el núcleo R; esto es una consecuencia de la forma en que R evolucionó como un lenguaje. Por ejemplo, muchas funciones en el núcleo R siguen la forma de foo.bar y se escribieron antes de que apareciera el sistema de objetos S3 y usaban esa notación para despachar el método. En retrospectiva, el nombramiento de estas funciones probablemente debería modificarse en aras de la coherencia y la claridad, pero ya es demasiado tarde para considerarlo.

En resumen, no existe una herramienta oficial de "estilo de pelusa" para R porque el R Core en sí contiene suficiente pelusa de estilo, de la cual no se puede hacer nada, que escribir sería muy difícil. Para cada regla --- "no hagas esto" --- tendría que haber una larga lista de excepciones --- "excepto en este caso, y este caso, y este, y ..., donde fue hecho para propósitos históricos ".

+0

escribiéndolo yo mismo, ya lo estaba considerando, ya sea alterando el compilador R o adaptando otro "pelusa" para trabajar con R. pero soy consciente de que esta es una gran empresa. – mariotomo

+1

pero, sobre los muchos estilos en el R Core, no veo el problema: un verificador de estilo se quejaría sobre lo que * defino *, no sobre lo que * uso *. ¡y no le pediría que verifique el R Core! :) – mariotomo

+0

a partir de la página de wikipedia para pelusa, me encontré con [Yasca] (http://en.wikipedia.org/wiki/Yasca). ¿Qué tal un [plugin] (http://www.scovetta.com/yasca/creating-a-plugin.html) para eso? – mariotomo

20

Hay un paquete formatR con la función tidy.source. Yo uso Emacs con ESS, y sigo Hadley's style recommendations. Es difícil comparar R con Python, ya que el estilo es una especie de obligatoria en Python, a diferencia de R. =)

EDITAR
una simple demostración:

code <- "fn <- function(x, y) { paste(x, '+', y, '-', x+y) }" 
tidy.source(text = code) 
## not run 
fn <- function(x, y) { 
    paste(x, "+", y, "-", x + y) 
} 
+2

que parece útil para código mal formateado que heredó de alguna manera. pero estoy buscando algo diferente, que solo me dice dónde no estoy siguiendo un estilo, dejándome la tarea de hacer algo al respecto (o no). – mariotomo

+0

No estoy seguro de si hay una herramienta como esa, pero gracias por darme una idea para una aplicación web. =) – aL3xa

+0

¿por qué una "aplicación web"? de todos modos, si lo tienes GPL y guardas las fuentes en un repositorio público, ¡me interesaría seguir el desarrollo! – mariotomo

5

En cuanto a

lo la mayoría de los programadores R realmente usan

Sospecho que un buen número de personas siguen R Core que tienen un R Coding standards section in the R Internals manual.

Que en un sentido amplio recae en estos sensibles valores predeterminados de Emacs para ser utilizados junto con ESS. Esto es lo que yo uso y que sólo se cambia mínimamente:

;;; C 
(add-hook 'c-mode-hook 
      ;;(lambda() (c-set-style "bsd"))) 
      ;;(lambda() (c-set-style "user"))) ; edd or maybe c++ ? 
      (lambda() (c-set-style "c++"))) ; edd or maybe c++ ? 
;;;; ESS 
(add-hook 'ess-mode-hook 
      (lambda() 
      (ess-set-style 'C++) 
     ;; Because 
      ;;         DEF GNU BSD K&R C++ 
      ;; ess-indent-level     2 2 8 5 4 
      ;; ess-continued-statement-offset 2 2 8 5 4 
      ;; ess-brace-offset     0 0 -8 -5 -4 
      ;; ess-arg-function-offset   2 4 0 0 0 
      ;; ess-expression-offset    4 2 8 5 4 
      ;; ess-else-offset     0 0 0 0 0 
      ;; ess-close-brace-offset   0 0 0 0 0 
      (add-hook 'local-write-file-hooks 
         (lambda() 
         (ess-nuke-trailing-whitespace))))) 
(setq ess-nuke-trailing-whitespace-p t) 

En cuanto a un general, bastante formatR-impresora herramienta de Xihui en efecto, puede ser el más cercano. O simplemente use ESS :)

+4

guau. el estándar de codificación R dice cerca de * nada * sobre el estilo? – mariotomo

+0

Para aquellos de uso sin emacs-fu, ¿qué deberíamos estar viendo en el último bloque de código? ¿La columna K & R indica que las sangrías en R deben ser 5 espacios? – naught101

+0

No, según tengo entendido, se ha seleccionado la última columna ('C++'). Todo está en cuatros, que también me gusta en otros idiomas. –

4

El paquete lint proporciona advertencias sobre problemas de estilo, sin corregirlos. Ejecutando el comando lint() (usando los valores de parámetros por defecto) le da una lista de advertencias para todos los archivos R en el directorio actual.

+1

El paquete de pelusa se ha archivado en CRAN en algún momento entre ahora y cuando se realizó esta respuesta, lo que puede significar que ya no es una buena opción para su consideración. – makeyourownmaker

3
  • lintr - pone de relieve los problemas/errores

  • CRAN Task View: Reproducible Research posible sintaxis y estilo - la sección de herramientas de formato contiene otras herramientas útiles, particularmente formatR cuales puede codificar automáticamente formt.

0

utilizo styler y luego lintr antes puedo comprobar nada en el control de versiones.

styler convierte su base de código para que coincida con un estilo determinado - el valor predeterminado coincide con el estilo de tidyverse descrito here. Modifica las alineaciones y algunas sintaxis (< - over =). Pero, no cambia el nombre de las variables ni nada de eso.

lintr no es modificante. Simplemente identifica líneas de código que son inconsistentes con su guía de estilo. Utilizo esto dentro de vim cuando estoy trabajando en un paquete o un proyecto para identificar cosas que necesitan un poco más de entrada humana para arreglar (cambiar el nombre de variables/funciones, etc.)

Cuestiones relacionadas