r formatting autoformatting

Herramienta para formatear automáticamente el código R



formatting autoformatting (5)

¿Hay alguna herramienta (editor, script, lo que sea ...) disponible que pueda reformatear automáticamente el código R? No es necesario que sea personalizable, pero debe poder reconocer las declaraciones separadas por punto y coma o líneas nuevas, ya que este código tiene ambas. Si puede poner todas las declaraciones en una línea separada, sangrar de forma consistente los bloques de código y colocar llaves de manera consistente, estaré muy contento.

Edición: resumen de los resultados

Gracias por las buenas respuestas. Esto es lo que he encontrado.

  • Tanto ESS como StatET son excelentes editores de R y hacen un buen trabajo de sangrado automático de bloques de código. StatET le permite seleccionar todo y volver a sangrar todo en un archivo a la vez. Por lo que pude decir, ESS le permite sangrar una función completa de una vez, pero no todo el archivo (corríjame si me lo perdí). Ninguno de estos solucionará la colocación de llaves o dividirá las líneas de múltiples enunciados. (Por ejemplo: i = n * b; a = i + 1)
  • formatR es impresionante. Además de corregir la sangría, también colocará llaves de manera consistente y dividirá las líneas de múltiples enunciados.

Aquí hay una pequeña función que escribí para poder convertir un directorio fuente completo (usando la misma función subyacente que formatR que está extrañamente en el paquete de animación).

library("animation") tidy.all <- function(inDir = NULL, outDir = NULL, ...) { if (is.null(inDir) || is.na(outDir)) stop("inDir can''t be null or NA") if (!file.info(inDir)$isdir) stop("inDir must be a directory") if (is.null(outDir) || is.na(outDir)) stop("outDir can''t be null or NA") if (!file.exists(outDir)) dir.create(outDir) if (!file.info(outDir)$isdir) stop("outDir must be a directory") for (f in dir(inDir)) { currFile <- file.path(inDir, f) if (length(grep(".*//.R$", currFile, perl = T))) { outFile <- file.path(outDir, f) if (file.exists(outFile)) stop(paste("refusing to overwrite", outFile)) tidy.source(currFile, file = outFile, ...) } } }


Aunque ESS es una solución a largo plazo mucho mejor, si solo tiene un trabajo de formateo rápido, quizás este paquete le ayude: http://yihui.name/en/?s=formatr .


Aunque nunca lo he usado, quizás el siguiente complemento de eclipse StatET pueda ayudarlo.



Puede usar ctrl + I en statET para corregir la sangría de su código. Sin embargo, es posible usar el paquete formatR con fragmentos de código que generan mejores resultados, especialmente asignándole una tecla de acceso rápido.