Obejście wielowierszowych komentarzy?


108

Znam już odpowiedź na to pytanie. Ale doszedłem do wniosku, że na liście użytkowników R jest tak często pytany, że powinna istnieć jedna solidna, dobra odpowiedź. O ile mi wiadomo, w R. nie ma funkcji komentarzy wielowierszowych. Czy ktoś ma więc jakieś dobre obejście?

Podczas gdy spora część pracy w R zwykle obejmuje sesje interaktywne (co budzi wątpliwości co do potrzeby wielowierszowych komentarzy), są chwile, kiedy musiałem wysyłać skrypty do kolegów i kolegów z klasy, z których większość obejmuje nietrywialne bloki kodu. A dla osób pochodzących z innych języków jest to dość naturalne pytanie.

W przeszłości użyłem cytatów. Ponieważ łańcuchy obsługują podziały wierszy, uruchamianie skryptu języka R z

"
Here's my multiline comment.

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

działa w porządku. Czy ktoś ma lepsze rozwiązanie?

Odpowiedzi:


50

To pojawia się na liście dyskusyjnej dość regularnie, zobacz na przykład ten ostatni wątek na r-help . Zgodną odpowiedzią jest zwykle ta pokazana powyżej: biorąc pod uwagę, że język nie ma bezpośredniego wsparcia, musisz też to zrobić

  • pracować z edytorem, który ma polecenia regionu do komentowania, a większość zaawansowanych edytorów języka R to robi
  • użyj if (FALSE)konstrukcji sugerowanych wcześniej, ale pamiętaj, że nadal wymaga pełnego analizowania i dlatego musi być poprawna składniowo

Dzięki. Czy mógłbyś rozszerzyć trochę o to, czy są jakieś perspektywy dla komentarzy wielowierszowych, czy jest to kwestia filozoficzna itp.?
HamiltonUlmer

1
Myślę, że wynika to z natury parsera i faktu, że R jest również interaktywnym środowiskiem (tj. Wierszem poleceń), a nie głównie interpreterem opartym na plikach, w którym komentarze wielowierszowe byłyby bardziej powszechne. Więc nie filozoficzne - tak się rozwinęło.
Dirk Eddelbuettel

Teraz, gdy R skompilował kod, czy sądzimy, że pojawią się komentarze wielowierszowe?
Ari B. Friedman,

Nie, ponieważ bazowy parser nie uległ zmianie.
Dirk Eddelbuettel

Właśnie opublikowałem odpowiedź, która nie wymaga poprawnej składni, chociaż jest bardziej przeznaczona do dokumentowania i komentowania typu ciągów tutaj niż proste przełączanie włączania / wyłączania bloku kodu.
Thell


36

Sprytną sztuczką dla RStudio, którą właśnie odkryłem, jest użycie, #'ponieważ tworzy to samorozwijającą się sekcję komentarzy (po powrocie do nowej linii z takiej linii lub wstawieniu nowych linii do takiej sekcji jest to automatycznie komentowany).


1
+1, ale najpierw pomyliłem się - może to jest bardziej czytelne:#'
bluenote10

To jest fajne! Świetny. Ktoś powinien połączyć tę odpowiedź z odpowiedzią podaną przez @Salvador, ponieważ można ich użyć w różnych przypadkach.
Alex Feng,

21

[Aktualizacja] Na podstawie komentarzy.

# 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()

[Oryginalna odpowiedź]

Oto inny sposób ... sprawdź zdjęcie na dole. Wytnij i wklej blok kodu do RStudio.

Komentarze wielowierszowe, które sprawiają, że korzystanie ze środowiska IDE jest bardziej efektywne, są „dobrą rzeczą”, większość IDE lub prostych edytorów nie ma podświetlania tekstu w prostych blokach z komentarzami; chociaż niektórzy autorzy poświęcili trochę czasu, aby zapewnić analizę składniową w ciągach tutaj. W R nie mamy też komentarzy wielowierszowych ani ciągów tekstowych, ale użycie niewidocznych wyrażeń w RStudio daje całą tę korzyść.

Tak długo, jak w sekcji nie ma żadnych lewych apostrofów, które mają być użyte w komentarzach wielowierszowych, łańcuchach tutaj lub niewykonanych blokach komentarzy, może to być coś wartego uwagi.

#### 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!"

A oto zdjęcie ...

Komentarze strukturalne


1
Myślę, że możesz zdefiniować, comment=function(z){invisible(expression(z))}co może pomóc ludziom zrozumieć, co się dzieje!
Spacedman

1
Być może nawet lepiej Comments<-function(`@Comments`)rm(`@Comments`). Ponieważ komentarz jest już prawidłową funkcją.
Thell

1
Czy naprawdę musisz coś zrobić z argumentem? Comments=function(x){}będzie działać dla gdzie xjest wyrażeniem wielowierszowym oddzielonym cudzysłowem odwrotnym. Nie będzie próbował tego oceniać ...
Spacedman,

Źródło pokazy echo NULL gdy puste szelki nie zawierają niewidoczne ()
Thell

Ale Comment <- function(`@Comments`) {invisible()}jeśli komentarz jest zbyt długi, pojawia się błąd:variable names are limited to 10000 bytes
Nir

11

Przychodzą mi do głowy dwie opcje. Pierwsza opcja to skorzystanie z edytora umożliwiającego blokowanie komentarzy i odkomentowywanie (np. Eclipse). Drugą opcją jest użycie instrukcji if. Ale to pozwoli ci tylko „skomentować” poprawną składnię języka R. Dlatego dobrym rozwiązaniem jest dobry edytor.

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

}

9

Jeśli uznasz za niewiarygodne, że jakikolwiek język tego nie zaspokoi.

To jest prawdopodobnie najczystsze obejście:

anything="
first comment line
second comment line
"

3
Działa dobrze, chyba że chcesz cytatów w swoim komentarzu;)
abalter

7

Oprócz korzystania z przesadnego sposobu komentowania kodów wieloliniowych po prostu instalując RStudio, możesz używać Notepad ++, ponieważ obsługuje on podświetlanie składni języka R

(Wybierz wiele linii) -> Edytuj -> Skomentuj / Usuń komentarz -> Przełącz komentarz blokowy

Pamiętaj, że najpierw musisz zapisać kod jako źródło .R (podświetlone na czerwono)

Pamiętaj, że najpierw musisz zapisać kod jako źródło .R (podświetlone na czerwono)


2

Używam vim do edycji skryptu R.

Powiedzmy, że skrypt R to test.R, zawierający powiedzmy „Line 1”, „Line 2” i „Line 3” w trzech oddzielnych wierszach.

Otwieram test.R w wierszu poleceń z Vimem, wpisując "vim test.R". Następnie przechodzę do pierwszej linii, którą chcę skomentować, wpisuję „Control-V”, strzałkę w dół do ostatniej linii, którą chcę skomentować, wpisuję wielką literę, tj. „I” do wstawienia, wpisuję „#”, a następnie naciśnij klawisz Escape, aby dodać znak „#” do każdego wiersza, który wybrałem, naciskając klawisze w dół. Zapisz plik w Vimie, a następnie zamknij Vima wpisując ": wq". Zmiany powinny pojawić się w Rstudio.

Aby usunąć komentarze w Vimie, zacznij od pierwszej linii nad znakiem „#”, który chcesz usunąć, ponownie wykonaj „Control-V” i strzałką w dół do ostatniej linii, z której chcesz usunąć znak „#”. Następnie wpisz „dd”. Znaki „#” należy usunąć.

Istnieje kilka sekund opóźnienia między zmianami do testu.R w Vimie są odzwierciedlane w Rstudio.


0

W RStudio prostym sposobem na zrobienie tego jest napisanie komentarza, a gdy użyjesz CTRL + Shift + C do skomentowania linii kodu, użyj CTRL + SHIFT + /, aby ponownie wprowadzić komentarz do wielu linii, aby ułatwić czytanie.


-2

W Pythonie tworzysz komentarz wielowierszowy z 3 pojedynczymi cudzysłowami przed i po komentarzach. Próbowałem tego w R i wydaje się, że działa również.

Na przykład.

'''
This is a comment
This is a second comment
'''
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.