2010-06-10 14 views
16

Gibt es ein Tool (Editor, Skript, was auch immer ...) verfügbar, das automatisch R-Code formatieren kann? Es muss nicht anpassbar sein, aber es muss in der Lage sein, durch Semikolons oder Zeilenumbrüche getrennte Anweisungen zu erkennen, da dieser Code beides hat. Wenn es alle Anweisungen in eine separate Zeile setzen kann, Codeblöcke konsequent einrücken und Klammern konsequent platzieren, werde ich sehr glücklich sein.Werkzeug zum automatischen Formatieren von R-Code

Edit: eine Zusammenfassung Ergebnisse

Vielen Dank für die tollen Antworten. Hier ist, was ich gefunden habe.

  • Sowohl ESS als auch STATET sind großartige R-Editoren und machen einen guten Job zum automatischen Einrücken von Code-Blöcken. Mit STATET können Sie alles in einer Datei gleichzeitig auswählen und neu einrücken. Von dem, was ich sagen konnte, erlaubt es ESS, eine ganze Funktion auf einmal, aber nicht die gesamte Datei einzurücken (bitte korrigiere mich, wenn ich es verpasst habe). Keine dieser Optionen wird die Platzierung von Klammern korrigieren oder Mehrfachzeilenzeilen auflösen. (ZB: i = n * b; a = i + 1)
  • formatR ist genial. Zusätzlich zum Fixieren der Einrückung werden Klammern auch konsistent platziert und Mehrfach-Anweisungszeilen aufgeteilt.
  • Hier ist eine kleine Funktion, die ich geschrieben habe, so dass ich ein komplettes Quellverzeichnis (mit der gleichen zugrundeliegenden Funktion wie FormatR, die seltsamerweise im Animationspaket ist) konvertieren kann.

    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, ...) 
         } 
        } 
    } 
    
    +1

    Ich schreibe "schönen Code" von Anfang an, weil ich es leichter zu lesen finde. Ich benutze das StatET Plugin für Eclipse (Ich habe ESS ausprobiert, aber ich finde es vergleichbar mit StatET), was für meine Arbeit vollkommen zufriedenstellend ist. –

    +0

    @romunov ja, ich stimme zu, aber die meisten der R-Code, den ich ändern muss, wurde ursprünglich nicht von mir erstellt – Keith

    +0

    Keith, guter Punkt. In diesem Fall finde ich FormatR wie eine ausgezeichnete Option (wie Sie bereits herausgefunden haben). –

    Antwort

    7

    Emacs mit ESS macht es außerordentlich gut - und die Standardeinstellung, wie durch R-Core empfohlen sind in Section 7 R coding standards des R Internals Handbuch.

    +0

    Wie machst du es in Ess? – qed

    +1

    http://ess.r-project.org/Manual/ess.html#Indenting –

    +0

    Großartig. Hier geht es um festgelegte Codestile. Wenn der Code etwas unordentlich ist, gibt es einen Befehl, das Format zu bereinigen? – qed

    6

    Ich verwende StatET, und es funktioniert ganz gut dafür.

    Sie könnten auch the formatR package auf CRAN versuchen.

    +1

    Wie machst du das bitte in StatET? Ich konnte die Option dafür nicht finden. – qed

    0

    Sie können Strg + I in statET verwenden, um den Einzug Ihres Codes zu beheben. Es ist jedoch möglich, das formatR-Paket mit Code-Snippets zu verwenden, die ein besseres Ergebnis erzielen, insbesondere durch Zuweisung eines Hotkeys.

    Verwandte Themen