Problemumgehungen für mehrzeilige Kommentare?

108

Ich kenne die Antwort auf diese Frage bereits. Aber ich dachte, es ist eines, das auf der R-Benutzerliste so häufig gefragt wird, dass es eine gute Antwort geben sollte. Nach meinem besten Wissen gibt es in R keine mehrzeilige Kommentarfunktion. Hat also jemand gute Problemumgehungen?

Während ein Großteil der Arbeit in R normalerweise interaktive Sitzungen umfasst (was Zweifel an der Notwendigkeit mehrzeiliger Kommentare aufkommen lässt), musste ich manchmal Skripte an Kollegen und Klassenkameraden senden, von denen ein Großteil nicht triviale Codeblöcke umfasst. Und für Leute, die aus anderen Sprachen kommen, ist das eine ziemlich natürliche Frage.

In der Vergangenheit habe ich Anführungszeichen verwendet. Da Zeichenfolgen Zeilenumbrüche unterstützen, wird ein R-Skript mit ausgeführt

"
Here's my multiline comment.

"
a <- 10
rocknroll.lm <- lm(blah blah blah)
 ...

funktioniert gut. Hat jemand eine bessere Lösung?

HamiltonUlmer
quelle

Antworten:

50

Dies taucht ziemlich regelmäßig auf der Mailingliste auf, siehe zum Beispiel diesen aktuellen Thread zur r-Hilfe . Die Konsensantwort ist normalerweise die oben gezeigte: Da die Sprache keine direkte Unterstützung hat, müssen Sie dies auch tun

  • Arbeiten Sie mit einem Editor, der über Befehle zum Regionieren von Kommentaren verfügt, und die fortschrittlichsten R-Editoren
  • Verwenden Sie die if (FALSE)zuvor vorgeschlagenen Konstrukte, beachten Sie jedoch, dass eine vollständige Analyse erforderlich ist und daher syntaktisch korrekt sein muss
Dirk Eddelbuettel
quelle
Vielen Dank. Würde es Ihnen etwas ausmachen, etwas näher darauf einzugehen, ob es Aussichten für mehrzeilige Kommentare gibt oder nicht, ob es sich um eine philosophische Sache handelt usw.?
HamiltonUlmer
1
Ich denke, das liegt an der Natur des Parsers und der Tatsache, dass R auch eine interaktive Umgebung (dh Befehlszeile) ist und nicht hauptsächlich ein dateibasierter Interpreter, in dem mehrzeilige Kommentare häufiger vorkommen. Also nicht philosophisch - es ist so gewachsen.
Dirk Eddelbuettel
Glauben wir, dass mehrzeilige Kommentare erscheinen werden, nachdem R Code kompiliert hat?
Ari B. Friedman
Nein, da sich der zugrunde liegende Parser nicht geändert hat.
Dirk Eddelbuettel
Ich habe gerade eine Antwort gepostet, die keine korrekte Syntax erfordert, obwohl sie eher für die Dokumentation und Kommentierung von Zeichenfolgen als für das einfache Aktivieren / Deaktivieren des Codeblocks gedacht ist.
Thell
70

Sie können dies einfach in RStudio tun :

Wählen Sie den Code aus und klicken Sie auf CTR+ SHIFT+ C , um den Code zu kommentieren / zu kommentieren.

Salvador Dali
quelle
36

Ein guter Trick für RStudio, den ich gerade entdeckt habe, ist die Verwendung, #'da dadurch ein sich selbst erweiternder Kommentarbereich erstellt wird (wenn Sie von einer solchen Zeile zu einer neuen Zeile zurückkehren oder neue Zeilen in einen solchen Abschnitt einfügen, wird dies automatisch kommentiert).

Geotheorie
quelle
1
+1 aber ich habe es zuerst falsch verstanden - vielleicht ist dies besser lesbar:#'
bluenote10
Das ist ordentlich! Tolle Sache. Jemand sollte diese Antwort mit der von @Salvador bereitgestellten kombinieren, da diese in verschiedenen Fällen verwendet werden können.
Alex Feng
21

[Update] Basierend auf Kommentaren.

# An empty function for Comments
Comment <- function(`@Comments`) {invisible()}

#### Comments ####
Comment( `

  # Put anything in here except back-ticks.

  api_idea <- function() {
    return TRUE
  }

  # Just to show api_idea isn't really there...
  print( api_idea )

`)
####

#### Code. ####
foo <- function() {
  print( "The above did not evaluate!")
}
foo()

[Ursprüngliche Antwort]

Hier ist ein anderer Weg ... sieh dir das Bild unten an. Schneiden Sie den Codeblock aus und fügen Sie ihn in RStudio ein.

Mehrzeilige Kommentare , die eine IDE machen mit mehr wirksam sind , eine „gute Sache“, die meisten IDEs oder einfache Editoren haben nicht von Text in einfacher Hervorhebung -out Blöcke kommentiert; Einige Autoren haben sich jedoch die Zeit genommen, um das Parsen innerhalb der hier angegebenen Zeichenfolgen sicherzustellen. Mit R haben wir auch keine mehrzeiligen Kommentare oder Hier-Strings, aber die Verwendung unsichtbarer Ausdrücke in RStudio bietet all diese Güte.

Solange der Abschnitt keine Backticks enthält, die für mehrzeilige Kommentare, Hier-Zeichenfolgen oder nicht ausgeführte Kommentarblöcke verwendet werden sollen, ist dies möglicherweise etwas Wertvolles.

#### Intro Notes & Comments ####
invisible( expression( `
{ <= put the brace here to reset the auto indenting...

  Base <- function()
  {      <^~~~~~~~~~~~~~~~ Use the function as a header and nesting marker for the comments
         that show up in the jump-menu.
         --->8---
  }

  External <- function()
  {
    If we used a function similar to:
      api_idea <- function() {

        some_api_example <- function( nested ) {
          stopifnot( some required check here )
        }

        print("Cut and paste this into RStudio to see the code-chunk quick-jump structure.")
        return converted object
      }

    #### Code. ####
    ^~~~~~~~~~~~~~~~~~~~~~~~~~ <= Notice that this comment section isnt in the jump menu!
                                  Putting an apostrophe in isn't causes RStudio to parse as text
                                  and needs to be matched prior to nested structure working again.
    api_idea2 <- function() {

    } # That isn't in the jump-menu, but the one below is...

    api_idea3 <- function() {

    }

  }

    # Just to show api_idea isn't really there...
    print( api_idea )
    }`) )
####

#### Code. ####
foo <- function() {
  print( "The above did not evaluate and cause an error!")
}

foo()

## [1] "The above did not evaluate and cause an error!"

Und hier ist das Bild ...

Strukturierte Kommentare

Thell
quelle
1
Ich denke, Sie können definieren comment=function(z){invisible(expression(z))}, was den Leuten helfen könnte, zu verstehen, was zum Teufel los ist!
Spacedman
1
Vielleicht sogar noch besser Comments<-function(`@Comments`)rm(`@Comments`). Da Kommentar bereits eine gültige Funktion ist.
Thell
1
Müssen Sie tatsächlich etwas mit dem Argument tun? Comments=function(x){}funktioniert für wo xein mehrzeiliger Ausdruck durch backquote begrenzt ist. Es wird nicht versuchen, es zu bewerten ...
Spacedman
Quelle mit Echo zeigt NULL, wenn die leeren Klammern nicht unsichtbar enthalten ()
Thell
Aber mit Comment <- function(`@Comments`) {invisible()}, wenn der Kommentar zu lang ist, erhalten Sie eine Fehlermeldung:variable names are limited to 10000 bytes
Nir
11

Ich kann mir zwei Möglichkeiten vorstellen. Die erste Option ist die Verwendung eines Editors, mit dem Kommentare und Kommentare blockiert werden können (z. B. Eclipse). Die zweite Option ist die Verwendung einer if-Anweisung. Damit können Sie jedoch nur die korrekte R-Syntax 'kommentieren'. Daher ist ein guter Editor die bevorzugte Problemumgehung.

if(FALSE){
     #everything in this case is not executed

}
Thierry
quelle
9

Wenn es unglaublich ist, dass keine Sprache dafür sorgen würde.

Dies ist wahrscheinlich die sauberste Problemumgehung:

anything="
first comment line
second comment line
"
R. Sake
quelle
3
Funktioniert gut, es sei denn, Sie möchten Zitate in Ihrem Kommentar;)
Abalter
7

Abgesehen von der übertriebenen Methode, mehrzeilige Codes nur durch die Installation von RStudio zu kommentieren, können Sie Notepad ++ verwenden, da es die Syntaxhervorhebung von R unterstützt

(Mehrzeilig auswählen) -> Bearbeiten -> Kommentar / Kommentar entfernen -> Blockkommentar umschalten

Beachten Sie, dass Sie den Code zuerst als .R-Quelle speichern müssen (rot hervorgehoben).

Beachten Sie, dass Sie den Code zuerst als .R-Quelle speichern müssen (rot hervorgehoben).

im_chc
quelle
2

Ich benutze vim, um das R-Skript zu bearbeiten.

Angenommen, das R-Skript ist test.R und enthält in drei separaten Zeilen "Zeile 1", "Zeile 2" und "Zeile 3".

Ich öffne test.R in der Befehlszeile mit Vim, indem ich "vim test.R" eingebe. Dann gehe ich zur ersten Zeile, die ich auskommentieren möchte, tippe "Strg-V", den Abwärtspfeil zur letzten Zeile, die ich auskommentieren möchte, tippe ein Großbuchstaben, dh "I" zum Einfügen, tippe "#" und dann Drücken Sie die Escape-Taste, um jeder Zeile, die ich durch einen Pfeil nach unten ausgewählt habe, "#" hinzuzufügen. Speichern Sie die Datei in Vim und beenden Sie Vim, indem Sie ": wq" eingeben. Änderungen sollten in Rstudio angezeigt werden.

Um die Kommentare in Vim zu löschen, beginnen Sie in der ersten Zeile über dem Zeichen "#", das Sie löschen möchten, führen Sie erneut "Control-V" aus und klicken Sie auf die letzte Zeile, aus der Sie ein "#" löschen möchten. Geben Sie dann "dd" ein. Die "#" Zeichen sollten gelöscht werden.

Zwischen den Änderungen an test.R in Vim wird eine Verzögerung von Sekunden angezeigt, die sich in Rstudio widerspiegelt.

Qian Zhang
quelle
0

In RStudio können Sie dies auf einfache Weise tun, indem Sie Ihren Kommentar schreiben. Wenn Sie STRG + Umschalt + C zum Kommentieren Ihrer Codezeile verwendet haben, können Sie den Kommentar mit STRG + UMSCHALT + / auf mehrere Zeilen umleiten, um das Lesen zu vereinfachen.

Mark Stevenson
quelle
-2

In Python erstellen Sie vor und nach den Kommentaren einen mehrzeiligen Kommentar mit 3 einfachen einfachen Anführungszeichen. Ich habe es in R versucht und es scheint auch zu funktionieren.

Z.B.

'''
This is a comment
This is a second comment
'''
P. Roberto Bakker Doornebal
quelle