Solutions de contournement des commentaires multilignes?

108

Je connais (en quelque sorte) déjà la réponse à cette question. Mais j'ai pensé que c'était une question qui était posée si fréquemment sur la liste des utilisateurs R, qu'il devrait y avoir une bonne réponse solide. À ma connaissance, il n'y a pas de fonctionnalité de commentaire multiligne dans R. Alors, est-ce que quelqu'un a de bonnes solutions de contournement?

Bien qu'un peu de travail en R implique généralement des sessions interactives (ce qui jette un doute sur la nécessité de commentaires multilignes), il y a des moments où j'ai dû envoyer des scripts à des collègues et camarades de classe, dont une grande partie implique des blocs de code non triviaux. Et pour les personnes venant d'autres langues, c'est une question assez naturelle.

Dans le passé, j'ai utilisé des citations. Étant donné que les chaînes prennent en charge les sauts de ligne, l'exécution d'un script R avec

"
Here's my multiline comment.

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

fonctionne très bien. Quelqu'un at-il une meilleure solution?

HamiltonUlmer
la source

Réponses:

50

Cela revient assez régulièrement sur la liste de diffusion, voir par exemple ce fil récent sur r-help . La réponse consensuelle est généralement celle indiquée ci-dessus: étant donné que la langue n'a pas de support direct, vous devez soit

  • travailler avec un éditeur qui a des commandes de région à commentaire, et la plupart des éditeurs R avancés le font
  • utilisez les if (FALSE)constructions suggérées précédemment mais notez que cela nécessite toujours une analyse complète et doit donc être syntaxiquement correcte
Dirk Eddelbuettel
la source
Merci. Pourriez-vous préciser un peu s'il y a ou non des perspectives pour des commentaires multilignes, si c'est une chose philosophique, etc.?
HamiltonUlmer
1
Je pense que cela est dû à la nature de l'analyseur, et au fait que R est aussi un environnement interactif (c'est-à-dire: ligne de commande) plutôt qu'un interpréteur basé sur des fichiers où les commentaires multi-lignes seraient plus courants. Donc pas philosophique - il a grandi de cette façon.
Dirk Eddelbuettel
Maintenant que R a compilé le code, pensons-nous que les commentaires sur plusieurs lignes vont faire leur apparition?
Ari
Non, car l'analyseur sous-jacent n'a pas changé.
Dirk Eddelbuettel
Je viens de publier une réponse qui ne nécessite pas une syntaxe correcte, bien que ce soit plus pour la documentation et les commentaires de type chaîne ici que la simple bascule d'activation / désactivation de bloc de code.
Thell
70

Vous pouvez le faire facilement dans RStudio :

sélectionnez le code et cliquez sur CTR+ SHIFT+ C pour commenter / décommenter le code.

Salvador Dali
la source
36

Une astuce intéressante pour RStudio que je viens de découvrir est de l'utiliser #'car cela crée une section de commentaire auto-extensible (lorsque vous revenez à une nouvelle ligne à partir d'une telle ligne ou insérez de nouvelles lignes dans une telle section, il est automatiquement commenté).

géothéorie
la source
1
+1 mais je me suis trompé en premier - c'est peut-être plus lisible:#'
bluenote10
C'est chouette! Elle est bonne. Quelqu'un devrait combiner cette réponse avec celle fournie par @Salvador car elles peuvent être utilisées dans différents cas.
Alex Feng
21

[Mise à jour] Basé sur les commentaires.

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

[Réponse originale]

Voici une autre façon ... regardez la photo en bas. Coupez et collez le bloc de code dans RStudio.

Les commentaires multilignes qui rendent l'utilisation d'un IDE plus efficace sont une «bonne chose», la plupart des IDE ou éditeurs simples n'ont pas de surlignage de texte dans de simples blocs commentés -out; bien que certains auteurs aient pris le temps d'assurer l'analyse au sein des chaînes ici. Avec R, nous n'avons pas non plus de commentaires sur plusieurs lignes ni de chaînes ici, mais l'utilisation d'expressions invisibles dans RStudio donne tout ce bien.

Tant qu'il n'y a pas de backticks dans la section que vous souhaitez utiliser pour des commentaires multilignes, des chaînes ici ou des blocs de commentaires non exécutés, cela peut valoir la peine.

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

Et voici la photo ...

Commentaires structurés

Thell
la source
1
Je pense que vous pouvez définir comment=function(z){invisible(expression(z))}ce qui pourrait aider les gens à comprendre ce qui se passe!
Spacedman
1
Peut-être encore mieux, Comments<-function(`@Comments`)rm(`@Comments`). Puisque le commentaire est déjà une fonction valide.
Thell
1
Avez-vous besoin de faire quelque chose avec l'argument? Comments=function(x){}fonctionnera pour où xest une expression multiligne délimitée par des guillemets. Il n'essaiera pas de l'évaluer ...
Spacedman
La source avec écho montre NULL lorsque les accolades vides ne contiennent pas invisible ()
Thell
Mais avec Comment <- function(`@Comments`) {invisible()}, si le commentaire est trop long, vous obtenez une erreur:variable names are limited to 10000 bytes
Nir
11

Je peux penser à deux options. La première option est d'utiliser un éditeur qui permet de bloquer les commentaires et décommenter (par exemple Eclipse). La deuxième option consiste à utiliser une instruction if. Mais cela ne vous permettra que de «commenter» la syntaxe R correcte. Par conséquent, un bon éditeur est la solution de contournement préférée.

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

}
Thierry
la source
9

Si vous trouvez incroyable qu'aucune langue ne puisse répondre à cela.

C'est probablement la solution de contournement la plus propre:

anything="
first comment line
second comment line
"
R. Sake
la source
3
Fonctionne bien sauf si vous voulez des citations dans votre commentaire;)
abalter
7

En plus d'utiliser le moyen surpuissant de commenter les codes multilignes simplement en installant RStudio, vous pouvez utiliser Notepad ++ car il prend en charge la coloration syntaxique de R

(Sélectionnez plusieurs lignes) -> Modifier -> Commenter / Décommenter -> Basculer le commentaire de bloc

Notez que vous devez d'abord enregistrer le code en tant que source .R (surligné en rouge)

Notez que vous devez d'abord enregistrer le code en tant que source .R (surligné en rouge)

im_chc
la source
2

J'utilise vim pour éditer le script R.

Disons que le script R est test.R, contenant disons "Ligne 1", "Ligne 2" et "Ligne 3" sur 3 lignes séparées.

J'ouvre test.R sur la ligne de commande avec Vim en tapant "vim test.R". Ensuite, je vais à la 1ère ligne que je veux commenter, tapez "Control-V", la flèche vers le bas jusqu'à la dernière ligne que je veux commenter, tapez une majuscule I c'est-à-dire "I" pour insérer, tapez "#", puis appuyez sur la touche Échap pour ajouter "#" à chaque ligne que j'ai sélectionnée en fléchant vers le bas. Enregistrez le fichier dans Vim puis quittez Vim en tapant ": wq". Les modifications devraient apparaître dans Rstudio.

Pour supprimer les commentaires dans Vim, commencez à la première ligne au-dessus du caractère "#" que vous voulez supprimer, faites à nouveau "Control-V" et faites une flèche vers la dernière ligne à partir de laquelle vous voulez supprimer un "#". Tapez ensuite "dd". Les signes «#» doivent être supprimés.

Il y a un délai de quelques secondes entre le moment où les modifications apportées à test.R dans Vim sont reflétées dans Rstudio.

Qian Zhang
la source
0

Dans RStudio, un moyen simple de le faire est d'écrire votre commentaire et une fois que vous avez utilisé CTRL + Shift + C pour commenter votre ligne de code, utilisez CTRL + SHIFT + / pour redistribuer votre commentaire sur plusieurs lignes pour faciliter la lecture.

Mark Stevenson
la source
-2

En Python, vous faites un commentaire multiligne avec 3 guillemets simples avant et après les commentaires. J'ai essayé ceci dans R et cela semble fonctionner aussi.

Par exemple.

'''
This is a comment
This is a second comment
'''
P.Roberto Bakker Doornebal
la source