Recentemente mi sono trovato a lavorare con il codice R che si trova su tutta la mappa in termini di stile di codifica: più autori e singoli autori che non sono rigorosi nel rispettare una singola struttura. Ci sono alcuni compiti che mi piacerebbe automatizzare meglio di quello che faccio attualmente.Strumenti di riformattazione/rifattorizzazione del codice a conoscenza del linguaggio R?
Sto cercando uno strumento (o strumenti) che gestisca i seguenti compiti - elencati in ordine crescente di desiderio ma anche un po 'in ordine crescente di scetticismo sull'esistenza.
Formattazione di base. Cose come convertire "if (foo)" in "if (foo)" e raggiungere l'uniformità in termini di posizione del tutore e quel genere di cose.
Conversione di "foo $ blah" in "foo [[" blah "]]" per l'accesso all'elenco. Idealmente sarebbe in grado di fare almeno un'ipotesi se un oggetto fosse davvero un elenco e non un data.frame e solo liste di conversione.
Conversione da '=' a '< -'. Sì, questa è una semplice ricerca e sostituzione - ma non proprio. Lo strumento (o regexp) deve essere in grado di riconoscere la lingua in modo che sappia convertire "x = 5" ma non "foo (x = 5)". Sarebbe anche molto bello non semplicemente sostituire il simbolo, ma anche assicurare uno spazio bianco singolo su entrambi i lati dell'operatore di assegnazione.
Rinominazione variabile, in particolare tra le funzioni & file. Per esempio, supponiamo che una lista abbia un elemento "foo", mi piacerebbe poterlo cambiare in "foobar" una volta e non dover rintracciare ogni utilizzo di quella lista nell'intero flusso di codice. Immagino che ciò richiederebbe che lo strumento fosse in grado di controllare l'intero flusso di controllo al fine di identificare cose come quella lista esistente come un altro nome in una funzione diversa.
Convenzioni di denominazione. Mi piacerebbe essere in grado di definire alcune convenzioni di denominazione standard (ad esempio Google's o qualsiasi altra cosa) e farlo identificare tutte le funzioni, le variabili, ecc. E convertirle. Si noti che questo si collega con la voce precedente per cose come gli elementi della lista.
Sentitevi liberi di elencare i comandi di base di elaborazione UNIX (ad esempio, sed) fintanto che sarà davvero essere abbastanza intelligente per almeno solito non avvitare le cose (per esempio la conversione di "foo (x = 5)" a " pippo (x < -5) ").
Sto indovinando che se un tale strumento già esistente in uno stato perfetto che avrei sentito parlare, ormai, e sto anche rendersi conto che con una lingua come R è difficile fare un po 'di questi tipi di cambiamenti automagicamente, ma si può sognare, giusto? Qualcuno ha dei suggerimenti su alcuni/tutti questi?
riformattazione è stato discusso qui: http://stackoverflow.com/questions/5117359/any-r-style-guide-checker –
IIRC 'formatR' è un pacchetto che pulisce Codice R e copre alcuni punti nella tua lista. – baptiste
Il secondo obiettivo potrebbe essere un po 'confuso: un data.frame restituisce VERO per 'is.list()'. Si potrebbe provare qualcosa come 'is.list (myObject) e (! Is.data.frame (myObject))'. – Iterator