2009-08-05 1 views
88

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

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

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

" 
Here's my multiline comment. 

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

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

ответ

41

Это приходит на список рассылки достаточно регулярно, см for example this recent thread on r-help. Консенсус ответ, как правило, это один показано выше: что, учитывая, что язык не имеет прямой поддержки, вы должны либо

  • работы с редактором, который имеет команды регион-на-комментарий, и наиболее продвинутые редакторы R сделать
  • использовать if (FALSE) конструкции, предложенные ранее, но отметить, что она по-прежнему требует полного разбора и должен поэтому быть синтаксически правильно
+0

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

+1

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

+0

Теперь, когда R скомпилировал код, не будем ли мы думать о появлении многострочных комментариев? –

11

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

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

} 
7

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

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

anything=" 
first comment line 
second comment line 
" 
+3

Прекрасно работает, если вы не хотите, чтобы котировки в вашем комментарии;) – abalter

19

[Update] На основе замечаний.

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

А вот рис ...

Structured Comments

+1

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

+1

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

+1

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

49

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

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

26

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

+1

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

+0

Это также работает в Emacs с использованием ESS –

5

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

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

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

Note that you need to save the code as a .R source first (highlighted in red)

2

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

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

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

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

Существует секундомерное время задержки между изменениями в test.R в Vim отражаются в Rstudio.

0

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

0

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

Например.

''' 
This is a comment 
This is a second comment 
'''