Soluções alternativas para comentários multilinha?

108

Eu (meio que) já sei a resposta para essa pergunta. Mas percebi que é uma pergunta tão frequente na lista de usuários R, que deveria haver uma resposta sólida e boa. Até onde sei, não há funcionalidade de comentário em várias linhas em R. Então, alguém tem boas soluções alternativas?

Embora um pouco de trabalho em R geralmente envolva sessões interativas (o que lança dúvidas sobre a necessidade de comentários em várias linhas), às vezes tive que enviar scripts a colegas e colegas de classe, muitos dos quais envolvem blocos de código não triviais. E para pessoas que vêm de outras línguas, é uma pergunta bastante natural.

No passado, usei citações. Uma vez que as strings suportam quebras de linha, executando um script R com

"
Here's my multiline comment.

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

funciona bem. Alguém tem uma solução melhor?

HamiltonUlmer
fonte

Respostas:

50

Isso aparece na lista de discussão com bastante regularidade, veja por exemplo este tópico recente em r-help . A resposta de consenso geralmente é a mostrada acima: dado que a linguagem não tem suporte direto, você deve

  • trabalham com um editor que tem comandos região para comentário, e a maioria dos editores R avançados fazem
  • use as if (FALSE)construções sugeridas anteriormente, mas observe que ainda requer análise completa e deve, portanto, estar sintaticamente correto
Dirk Eddelbuettel
fonte
Obrigado. Você se importaria de expandir um pouco sobre se há ou não perspectivas para comentários em várias linhas, se é uma coisa filosófica, etc.?
HamiltonUlmer
1
Acho que é devido à natureza do analisador e ao fato de que R também é um ambiente interativo (ou seja: linha de comando), em vez de um interpretador baseado em arquivo, onde comentários em várias linhas seriam mais comuns. Tão filosófico - cresceu dessa forma.
Dirk Eddelbuettel
Agora que R compilou o código, achamos que os comentários de várias linhas vão aparecer?
Ari B. Friedman
Não, porque o analisador subjacente não mudou.
Dirk Eddelbuettel
Acabei de postar uma resposta que não requer sintaxe correta, embora seja mais para documentar e comentar o tipo here-string do que ativar / desativar um bloco de código simples.
Thell em
70

Você pode fazer isso facilmente no RStudio :

selecione o código e clique em CTR+ SHIFT+ C para comentar / descomentar o código.

Salvador Dalí
fonte
36

Um truque interessante para o RStudio que acabei de descobrir é usar, #'pois isso cria uma seção de comentário autoexpansível (quando você retorna para uma nova linha a partir de tal linha ou insere novas linhas em tal seção, é automaticamente um comentário).

geoteoria
fonte
1
+1, mas entendi errado primeiro - talvez seja mais legível:#'
bluenote10
Isso é legal! Muito bom. Alguém deveria combinar esta resposta com a fornecida por @Salvador porque elas podem ser usadas em diferentes casos.
Alex Feng
21

[Atualização] Com base em comentários.

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

[Resposta Original]

Aqui está outra maneira ... confira a foto na parte inferior. Recorte e cole o bloco de código no RStudio.

Comentários multilinha que tornam o uso de um IDE mais eficaz são uma "coisa boa", a maioria dos IDEs ou editores simples não tem destaque de texto dentro de blocos simples comentados; embora alguns autores tenham dedicado tempo para garantir a análise dentro das strings here. Com R, não temos comentários de várias linhas ou aqui também, mas o uso de expressões invisíveis no RStudio oferece tudo isso.

Contanto que não haja crases na seção desejada para serem usados ​​para comentários de várias linhas, strings here ou blocos de comentários não executados, então isso pode valer a pena.

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

E aqui está a foto ...

Comentários Estruturados

Thell
fonte
1
Acho que você pode definir o comment=function(z){invisible(expression(z))}que pode ajudar as pessoas a entender o que diabos está acontecendo!
Spacedman
1
Talvez ainda melhor Comments<-function(`@Comments`)rm(`@Comments`),. Uma vez que o comentário já é uma função válida.
Thell
1
Você realmente precisa fazer alguma coisa com o arg? Comments=function(x){}funcionará para onde xé uma expressão multilinha delimitada por crase. Não tentará avaliá-lo ...
Spacedman
Fonte com eco mostra NULL quando as chaves vazias não contêm invisível ()
Thell
Mas com Comment <- function(`@Comments`) {invisible()}, se o comentário for muito longo, você obterá um erro:variable names are limited to 10000 bytes
Nir
11

Posso pensar em duas opções. A primeira opção é usar um editor que permite bloquear comentários e descomentar (por exemplo, Eclipse). A segunda opção é usar uma instrução if. Mas isso só permitirá que você 'comente' a sintaxe R correta. Portanto, um bom editor é a solução alternativa preferida.

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

}
Thierry
fonte
9

Acho incrível que qualquer idioma não atendesse a isso.

Esta é provavelmente a solução mais limpa:

anything="
first comment line
second comment line
"
R. Sake
fonte
3
Funciona bem, a menos que você queira citações em seu comentário;)
abalter
7

Além de usar a maneira exagerada de comentar códigos de várias linhas apenas instalando o RStudio, você pode usar o Notepad ++, pois ele suporta o realce de sintaxe de R

(Selecione várias linhas) -> Editar -> Comentar / Descomentar -> Alternar Comentário do Bloco

Observe que você precisa salvar o código como uma fonte .R primeiro (destacado em vermelho)

Observe que você precisa salvar o código como uma fonte .R primeiro (destacado em vermelho)

im_chc
fonte
2

Eu uso o vim para editar o script R.

Digamos que o script R seja test.R, contendo, digamos, "Linha 1", "Linha 2" e "Linha 3" em 3 linhas separadas.

Eu abro test.R na linha de comando com o Vim digitando "vim test.R". Então, vou para a 1ª linha que desejo comentar, digito "Control-V", seta para baixo até a última linha que desejo comentar, digito I maiúsculo, ou seja, "I" para inserir, digite "#" e, em seguida, aperte a tecla Escape para adicionar "#" a cada linha que eu selecionei com as setas para baixo. Salve o arquivo no Vim e saia do Vim digitando ": wq". As alterações devem aparecer no Rstudio.

Para deletar os comentários no Vim, comece na primeira linha no topo do caractere "#" que você deseja deletar, novamente faça "Control-V", e vá até a última linha que você quer deletar um "#". Em seguida, digite "dd". Os sinais "#" devem ser excluídos.

Há segundos de atraso entre o momento em que as alterações em test.R no Vim são refletidas no Rstudio.

Qian Zhang
fonte
0

No RStudio, uma maneira fácil de fazer isso é escrever seu comentário e, depois de usar CTRL + Shift + C para comentar sua linha de código, use CTRL + SHIFT + / para refluir seu comentário em várias linhas para facilitar a leitura.

Mark Stevenson
fonte
-2

No Python, você faz um comentário em várias linhas com aspas simples 3x antes e depois dos comentários. Eu tentei isso no R e parece funcionar também.

Por exemplo.

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