Методы обхода многострочных комментариев?

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

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

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

"
Here's my multiline comment.

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

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

12 ответов

Решение

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

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

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

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

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

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

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

А вот и картинка...

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

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

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

}

Если сочтете невероятным, что любой язык не будет обслуживать это.

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

anything="
first comment line
second comment line
"

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

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

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

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

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

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

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

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

Между изменениями в test.R в Vim отражается задержка в секундах.

Теперь есть обходной путь, используя пакет ARTofR или bannerCommenter.

Примеры здесь:

В RStudio вы можете использовать знак фунта и цитировать так:

      #' This is a comment

Теперь, каждый раз, когда вы нажимаете return, вам не нужно добавлять #', RStudio автоматически вставит это за вас.

Кстати, для добавления возвращаемых параметров и элементов, для стандартизации, если вы введете символ @ внутри этих строк комментариев, RStudio автоматически покажет вам список кодов, связанных с этими параметрами комментария:

      #' @param tracker_df Dataframe of limit names and limits
#' @param invoice_data Dataframe of invoice data
#' @return return_list List of scores for each limit and rejected invoice rows

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

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

Например.

'''
This is a comment
This is a second comment
'''
Другие вопросы по тегам