Recientemente me encontré trabajando con el código R que está en todo el mapa en términos de estilo de codificación: varios autores y autores individuales que no son rigurosos en apegarse a una sola estructura. Hay ciertas tareas que me gustaría automatizar mejor de lo que lo hago actualmente.R ¿herramientas para reformatear/refactorizar códigos?
Estoy buscando una herramienta (o herramientas) que administre las siguientes tareas, enumeradas en orden creciente de deseo, pero también en orden creciente de escepticismo de la existencia.
Formato básico. Cosas como convertir "if (foo)" a "if (foo)" y lograr la uniformidad en cuanto a la ubicación de la abrazadera y ese tipo de cosas.
Convirtiendo "foo $ blah" a "foo [[" "blah"]] para acceder a la lista. Lo ideal es que al menos adivine si un objeto es realmente una lista y no un data.frame y solo convierte listas.
Conversión '=' a '< -'. Sí, esta es una simple búsqueda y reemplazo, pero no realmente. La herramienta (o regexp) debe tener en cuenta el idioma de modo que sepa convertir "x = 5" pero no "foo (x = 5)". También sería muy agradable no solo reemplazar el símbolo sino también garantizar un único espacio en blanco en ambos lados del operador de asignación.
Cambio de nombre de la variable, particularmente a través de las funciones & archivos. Por ejemplo, supongamos que una lista tiene un elemento "foo", me encantaría poder cambiarlo a "foobar" una vez y no tener que rastrear cada uso de esa lista a lo largo de todo el flujo de código. Me imagino que esto requeriría que la herramienta tenga todo el flujo de control para identificar cosas como esa lista existente como otro nombre en una función diferente.
Convenciones de nomenclatura. Me encantaría poder definir alguna convención de nomenclatura estándar (por ejemplo, Google's o lo que sea) y hacer que identifique todas las funciones, variables, etc. y convertirlas. Tenga en cuenta que esto se relaciona con la entrada anterior para cosas como elementos de lista.
Siéntase libre de ver los comandos básicos de procesamiento de Unix (por ejemplo SED) con tal de que realmente será lo suficientemente inteligente como para, al menos, por lo general no tornillo cosas (por ejemplo, la conversión de "foo (x = 5)" a " foo (x < -5) ").
Supongo que si tal herramienta ya existiera en un estado perfecto, ya la habría escuchado y también me estoy dando cuenta de que con un lenguaje como R es difícil hacer algunos de estos tipos. de cambios automágicamente, pero uno puede soñar, ¿verdad? ¿Alguien tiene consejos sobre algunos/todos estos?
El cambio de formato se discutió aquí: http://stackoverflow.com/questions/5117359/any-r-style-guide-checker –
IIRC 'formatR' es un paquete que limpia Código R y cubre algunos puntos en su lista. – baptiste
El segundo objetivo podría ser un poco complicado: un data.frame devuelve TRUE para 'is.list()'. Podría intentar algo como 'is.list (myObject) & (! Is.data.frame (myObject))'. – Iterator