Обходные пути для многострочных комментариев?


108

Я (вроде) уже знаю ответ на этот вопрос. Но я решил, что это тот, который так часто задают в списке пользователей R, что должен быть один твердый хороший ответ. Насколько мне известно, в R. нет функции многострочных комментариев. Итак, есть ли у кого-нибудь хорошие обходные пути?

Хотя довольно большая часть работы в R обычно связана с интерактивными сеансами (что ставит под сомнение необходимость многострочных комментариев), бывают случаи, когда мне приходилось отправлять сценарии коллегам и одноклассникам, большая часть которых связана с нетривиальными блоками кода. А для людей, говорящих на других языках, это вполне естественный вопрос.

Раньше я использовал цитаты. Поскольку строки поддерживают разрывы строк, запуск сценария R с

"
Here's my multiline comment.

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

работает отлично. Есть ли у кого-нибудь лучшее решение?

Ответы:


50

Это действительно появляется в списке рассылки довольно регулярно, см., Например, эту недавнюю ветку на r-help . Консенсусным ответом обычно является тот, который показан выше: учитывая, что язык не имеет прямой поддержки, вы должны либо

  • работать с редактором, в котором есть команды для комментирования области, а большинство продвинутых редакторов R
  • используйте if (FALSE)конструкции, предложенные ранее, но обратите внимание, что они все еще требуют полного анализа и, следовательно, должны быть синтаксически правильными

Спасибо. Не могли бы вы немного рассказать о том, есть ли перспективы для многострочных комментариев, является ли это философской вещью и т. Д.?
HamiltonUlmer,

1
Я думаю, что это связано с природой парсера и тем фактом, что R также является интерактивной средой (например, командной строкой), а не в основном файловым интерпретатором, где более распространены многострочные комментарии. Так что не философски - так оно и выросло.
Дирк Эдделбюттель,

Теперь, когда R скомпилировал код, думаем ли мы, что появятся многострочные комментарии?
Ари Б. Фридман

Нет, так как базовый парсер не изменился.
Дирк Эддельбюттель

Просто опубликовал ответ, который не требует правильного синтаксиса, хотя он больше предназначен для документирования и комментирования типа здесь-строки, чем простой переключатель включения / отключения блока кода.
Thell

70

Вы можете легко сделать это в RStudio :

выберите код и нажмите CTR+ SHIFT+, C чтобы прокомментировать / раскомментировать код.


36

Изящный трюк для RStudio, который я только что обнаружил, заключается в использовании, #'поскольку он создает саморасширяющийся раздел комментариев (когда вы возвращаетесь к новой строке из такой строки или вставляете новые строки в такой раздел, он автоматически становится комментарием).


1
+1 но я сначала ошибся - может, это более читабельно:#'
bluenote10

Это здорово! Великий. Кто-то должен объединить этот ответ с ответом, предоставленным @Salvador, потому что они могут использоваться в разных случаях.
Alex Feng

21

[Обновление] Основано на комментариях.

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

[Оригинальный ответ]

Вот еще один способ ... посмотрите на картинку внизу. Вырежьте и вставьте блок кода в RStudio.

Многострочные комментарии, которые делают использование IDE более эффективным, являются "хорошей вещью", большинство IDE или простых редакторов не имеют выделения текста в простых блоках с комментариями; хотя некоторые авторы нашли время, чтобы обеспечить синтаксический анализ внутри строк. С R у нас также нет многострочных комментариев или здесь-строк, но использование невидимых выражений в RStudio дает все это совершенство.

Пока в разделе нет обратных кавычек, которые нужно использовать для многострочных комментариев, здесь-строк или невыполненных блоков комментариев, это может быть чем-то стоящим.

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

А вот фото ...

Структурированные комментарии


1
Я думаю, вы можете определить, comment=function(z){invisible(expression(z))}что может помочь людям понять, что, черт возьми, происходит!
Spacedman

1
Возможно, даже лучше Comments<-function(`@Comments`)rm(`@Comments`). Поскольку комментарий уже является допустимой функцией.
Thell

1
Вам действительно нужно что-то делать с аргументом? Comments=function(x){}будет работать для xмногострочного выражения, разделенного обратной кавычкой. Он не будет пытаться это оценить ...
Spacedman

Источник с эхо показывает NULL, если пустые фигурные скобки не содержат invisible ()
Thell

Но Comment <- function(`@Comments`) {invisible()}если комментарий будет слишком длинным, вы получите сообщение об ошибке:variable names are limited to 10000 bytes
Нир

11

Я могу придумать два варианта. Первый вариант - использовать редактор, который позволяет блокировать комментарии и раскомментировать (например, Eclipse). Второй вариант - использовать оператор if. Но это позволит вам только «прокомментировать» правильный синтаксис R. Следовательно, хороший редактор - предпочтительный обходной путь.

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

}

9

Если это невероятно, что ни один язык не поддерживает это.

Это, вероятно, самый чистый обходной путь:

anything="
first comment line
second comment line
"

3
Работает нормально, если вы не хотите
цитировать

7

Помимо использования избыточного способа комментирования многострочных кодов, просто установив RStudio, вы можете использовать Notepad ++, поскольку он поддерживает подсветку синтаксиса R

(Выбрать несколько строк) -> Правка -> Комментарий / раскомментировать -> Переключить комментарий блока

Обратите внимание, что вам нужно сначала сохранить код как источник .R (выделен красным)

Обратите внимание, что вам нужно сначала сохранить код как источник .R (выделен красным)


2

Я использую vim для редактирования сценария R.

Скажем, сценарий R - это test.R, содержащий, скажем, «Строка 1», «Строка 2» и «Строка 3» на трех отдельных строках.

Я открываю test.R в командной строке с помощью Vim, набирая «vim test.R». Затем я перехожу к первой строке, которую хочу закомментировать, набираю «Control-V», стрелку вниз до последней строки, которую я хочу закомментировать, набираю заглавную букву I, т.е. «I» для вставки, набираю «#», а затем нажмите клавишу Escape, чтобы добавить «#» к каждой строке, которую я выделил стрелкой вниз. Сохраните файл в Vim, а затем выйдите из Vim, набрав ": wq". Изменения должны появиться в Rstudio.

Чтобы удалить комментарии в Vim, начните с первой строки над символом «#», который вы хотите удалить, снова нажмите «Control-V» и сделайте стрелку вниз до последней строки, из которой вы хотите удалить «#». Затем введите «дд». Знаки «#» следует удалить.

Между изменениями, внесенными в test.R в Vim, и отражением их в Rstudio существует задержка в несколько секунд.


0

В RStudio простой способ сделать это - написать свой комментарий, и после того, как вы использовали CTRL + Shift + C, чтобы прокомментировать свою строку кода, затем используйте CTRL + SHIFT + /, чтобы переформатировать комментарий на нескольких строках для удобства чтения.


-2

В Python вы делаете многострочный комментарий с тремя одинарными кавычками до и после комментариев. Я пробовал это в R, и, похоже, он тоже работает.

Например.

'''
This is a comment
This is a second comment
'''
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.