¿Soluciones alternativas para comentarios de varias líneas?

108

Yo (más o menos) ya sé la respuesta a esta pregunta. Pero pensé que es uno que se pregunta con tanta frecuencia en la lista de usuarios de R, que debería haber una buena respuesta sólida. Hasta donde yo sé, no hay una funcionalidad de comentarios de varias líneas en R. Entonces, ¿alguien tiene alguna buena solución?

Si bien un poco de trabajo en R generalmente implica sesiones interactivas (lo que arroja dudas sobre la necesidad de comentarios de varias líneas), hay ocasiones en las que he tenido que enviar scripts a colegas y compañeros de clase, muchos de los cuales involucran bloques de código no triviales. Y para las personas que provienen de otros idiomas, es una pregunta bastante natural.

En el pasado he usado comillas. Dado que las cadenas admiten saltos de línea, ejecutar un script R con

"
Here's my multiline comment.

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

funciona bien. ¿Alguien tiene una solución mejor?

HamiltonUlmer
fuente

Respuestas:

50

Esto aparece en la lista de correo con bastante regularidad, vea, por ejemplo, este hilo reciente en r-help . La respuesta de consenso generalmente es la que se muestra arriba: que dado que el idioma no tiene soporte directo, debe

  • trabajar con un editor que tiene comandos de región para comentar, y los editores R más avanzados lo hacen
  • use las if (FALSE)construcciones sugeridas anteriormente, pero tenga en cuenta que aún requiere un análisis completo y, por lo tanto, debe ser sintácticamente correcto
Dirk Eddelbuettel
fuente
Gracias. ¿Le importaría ampliar un poco sobre si hay perspectivas de comentarios de varias líneas, si es una cuestión filosófica, etc.?
HamiltonUlmer
1
Creo que se debe a la naturaleza del analizador y al hecho de que R también es un entorno interactivo (es decir, línea de comandos) en lugar de un intérprete basado principalmente en archivos donde los comentarios de varias líneas serían más comunes. Así que no es filosófico, ha crecido de esta manera.
Dirk Eddelbuettel
Ahora que R ha compilado el código, ¿creemos que aparecerán comentarios de varias líneas?
Ari B. Friedman
No, ya que el analizador subyacente no ha cambiado.
Dirk Eddelbuettel
Acabo de publicar una respuesta que no requiere una sintaxis correcta, aunque es más para documentar y comentar el tipo de cadena aquí que para activar / desactivar el bloque de código.
Thell
70

Puede hacer esto fácilmente en RStudio :

seleccione el código y haga clic en CTR+ SHIFT+ C para comentar / descomentar el código.

Salvador Dalí
fuente
36

Un buen truco para RStudio que acabo de descubrir es usarlo, #'ya que esto crea una sección de comentarios autoexpandible (cuando regresa a una nueva línea desde dicha línea o inserta nuevas líneas en dicha sección, se convierte automáticamente en comentario).

geoteoria
fuente
1
+1 pero me equivoqué primero, tal vez esto sea más legible:#'
bluenote10
¡Esto es genial! Muy buena. Alguien debería combinar esta respuesta con la proporcionada por @Salvador porque estas se pueden usar en diferentes casos.
Alex Feng
21

[Actualización] Basado en comentarios.

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

[Respuesta original]

Aquí hay otra forma ... mira la foto en la parte inferior. Corta y pega el bloque de código en RStudio.

Los comentarios de varias líneas que hacen que el uso de un IDE sea más efectivo son "algo bueno", la mayoría de los IDE o editores simples no tienen texto resaltado dentro de bloques simples comentados; aunque algunos autores se han tomado el tiempo de asegurar el análisis dentro de here-strings. Con R no tenemos comentarios de varias líneas ni cadenas aquí, pero el uso de expresiones invisibles en RStudio ofrece todas esas bondades.

Siempre que no haya comillas invertidas en la sección que se desee utilizar para comentarios de varias líneas, cadenas de texto o bloques de comentarios no ejecutados, esto podría ser algo que valga la 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!"

Y aquí está la foto ...

Comentarios estructurados

Thell
fuente
1
¡Creo que puedes definir lo comment=function(z){invisible(expression(z))}que podría ayudar a la gente a entender qué diablos está pasando!
Spacedman
1
Quizás incluso mejor Comments<-function(`@Comments`)rm(`@Comments`). Dado que el comentario ya es una función válida.
Thell
1
¿Necesitas hacer algo con el arg? Comments=function(x){}funcionará para donde xes una expresión de varias líneas delimitada por comillas inversas. No intentará evaluarlo ...
Spacedman
La fuente con eco muestra NULL cuando las llaves vacías no contienen invisible ()
Thell
Pero con Comment <- function(`@Comments`) {invisible()}, si el comentario es demasiado largo, aparece un error:variable names are limited to 10000 bytes
Nir
11

Puedo pensar en dos opciones. La primera opción es utilizar un editor que permita bloquear comentarios y descomentar (por ejemplo, Eclipse). La segunda opción es usar una declaración if. Pero eso solo le permitirá 'comentar' la sintaxis R correcta. Por lo tanto, un buen editor es la solución alternativa preferida.

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

}
Thierry
fuente
9

Si encuentra increíble que cualquier idioma no se adapte a esto.

Esta es probablemente la solución más limpia:

anything="
first comment line
second comment line
"
R. Sake
fuente
3
Funciona bien a menos que desee citas en su comentario;)
abalter
7

Además de usar la forma exagerada de comentar códigos de varias líneas simplemente instalando RStudio, puede usar Notepad ++ ya que admite el resaltado de sintaxis de R

(Seleccione varias líneas) -> Editar -> Comentar / Descomentar -> Alternar comentario de bloque

Tenga en cuenta que primero debe guardar el código como una fuente .R (resaltado en rojo)

Tenga en cuenta que primero debe guardar el código como una fuente .R (resaltado en rojo)

im_chc
fuente
2

Utilizo vim para editar el script R.

Digamos que la secuencia de comandos de R es test.R, que contiene, por ejemplo, "Línea 1", "Línea 2" y "Línea 3" en 3 líneas separadas.

Abro test.R en la línea de comando con Vim escribiendo "vim test.R". Luego voy a la primera línea que quiero comentar, escribo "Control-V", flecha hacia abajo hasta la última línea que quiero comentar, escribo una I mayúscula, es decir, "I" para insertar, escribo "#", y luego presione la tecla Escape para agregar "#" a cada línea que seleccioné con las flechas hacia abajo. Guarde el archivo en Vim y luego salga de Vim escribiendo ": wq". Los cambios deberían aparecer en Rstudio.

Para eliminar los comentarios en Vim, comience en la primera línea en la parte superior del carácter "#" que desea eliminar, nuevamente haga "Control-V", y la flecha hacia abajo hasta la última línea de la que desea eliminar un "#". Luego escriba "dd". Los signos "#" deben eliminarse.

Hay un lapso de tiempo de segundos entre el momento en que los cambios para probar. R en Vim se reflejan en Rstudio.

Qian Zhang
fuente
0

En RStudio, una manera fácil de hacer esto es escribir su comentario y una vez que haya usado CTRL + Shift + C para comentar su línea de código, use CTRL + SHIFT + / para rehacer su comentario en varias líneas para facilitar la lectura.

Mark Stevenson
fuente
-2

En Python, hace un comentario de varias líneas con 3 comillas simples antes y después de los comentarios. Probé esto en R y parece funcionar también.

P.ej.

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