Багаторядковий коментар Обхідні шляхи?


108

Я (начебто) вже знаю відповідь на це питання. Але я подумав, що саме такий список часто запитують у списку користувачів 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


36

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


1
+1, але я спершу помилився - можливо, це читабельніше:#'
bluenote10

Це акуратно! Чудовий. Хтось повинен поєднати цю відповідь з тією, яку надав @Salvador, оскільки їх можна використовувати в різних випадках.
Алекс Фен

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))}що може допомогти людям зрозуміти, що за чорт відбувається!
Спайдермен

1
Може бути , навіть краще, Comments<-function(`@Comments`)rm(`@Comments`). Оскільки коментар - це вже дійсна функція.
Thell

1
Чи потрібно насправді щось робити з аргументом? Comments=function(x){}буде працювати для того, де xє багаторядковий вираз, обмежений зворотною цитатою. Він не намагатиметься оцінити це ...
Spacedman

Джерело з відлунням показує NULL, коли порожні дужки не містять невидимого ()
Thell

Але Comment <- function(`@Comments`) {invisible()}якщо коментар занадто довгий, ви отримуєте помилку:variable names are limited to 10000 bytes
Nir

11

Я можу придумати два варіанти. Перший варіант - використовувати редактор, що дозволяє блокувати коментарі та коментувати (наприклад, Eclipse). Другий варіант - використовувати оператор if. Але це дозволить лише "коментувати" правильний синтаксис R. Таким чином, хороший редактор є кращим способом вирішення.

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

}

9

Якщо ви вважаєте неймовірним, що будь-яка мова для цього не задовольнятиме.

Це, мабуть, найчистіший спосіб вирішення:

anything="
first comment line
second comment line
"


7

Крім використання перенавантаженого способу коментувати багаторядкові коди, просто встановивши RStudio, ви можете використовувати Notepad ++, оскільки він підтримує підсвічування синтаксису R

(Виберіть багато рядків) -> Редагувати -> Коментар / Відмінити коментар -> Увімкнути блокування коментаря

Зауважте, що вам потрібно спочатку зберегти код як джерело .R (виділено червоним кольором)

Зауважте, що вам потрібно спочатку зберегти код як джерело .R (виділено червоним кольором)


2

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

Скажімо, сценарій R - це test.R, який містить "Рядок 1", "Рядок 2" та "Рядок 3" у 3 окремих рядках.

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

Щоб видалити коментарі у Vim, почніть з першого рядка зверху символу "#", який ви хочете видалити, знову зробіть "Control-V" та стрілку вниз до останнього рядка, з якого потрібно видалити "#". Потім введіть "dd". Знаки "#" слід видалити.

Між часом, коли зміни в test.R в Vim відображаються на Rstudio, варто секунди.


0

У RStudio найпростіший спосіб зробити це - написати коментар, і як тільки ви скористаєтесь CTRL + Shift + C, щоб прокоментувати свій рядок коду, тоді використовуйте CTRL + SHIFT + /, щоб повторно коментувати кілька рядків для зручності читання.


-2

У Python ви робите багаторядковий коментар із 3-кратними одиничними цитатами до та після коментарів. Я спробував це в R, і, здається, це також працює.

Напр.

'''
This is a comment
This is a second comment
'''
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.