複数行コメントの回避策?


108

私は(ある程度)すでにこの質問に対する答えを知っています。しかし、私はそれがRユーザーリストで頻繁に尋ねられるものであると考え、1つの確かな良い答えがあるはずです。 私の知る限りでは、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はファイルベースのインタープリターというよりもインタラクティブな環境(つまり、コマンドライン)であり、複数行のコメントがより一般的であるという事実があると思います。だから哲学的ではない-それはこのように成長しました。
Dirk Eddelbuettel、2009

Rがコードをコンパイルしたので、複数行のコメントが表示されると思いますか?
Ari B. Friedman、

いいえ、基礎となるパーサーは変更されていないため。
Dirk Eddelbuettel、2011

正しい構文を必要としない回答を投稿しましたが、それは単純なコードブロックの有効化/無効化の切り替えではなく、ヒア文字列型のドキュメント化とコメント化のためのものです。
Thell


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では、複数行のコメントやhere-stringsはありませんが、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、2012年

1
おそらくもっと良いでしょうComments<-function(`@Comments`)rm(`@Comments`)。コメントはすでに有効な関数なので。
Thell

1
argで実際に何かする必要がありますか?は、バッククォートで区切られた複数行式Comments=function(x){}である場合に機能しxます。それを評価しようとはしません...
Spacedman '25

空のブレースにinvisible()が含まれていない場合、エコーのあるソースはNULLを示します
Thell

しかし、とのComment <- function(`@Comments`) {invisible()}コメントが長すぎる場合は、エラーを取得、:variable names are limited to 10000 bytes
ニール

11

2つのオプションが考えられます。最初のオプションは、コメントをブロックしたりコメントを外したりできるエディター(Eclipseなど)を使用することです。2番目のオプションは、ifステートメントを使用することです。しかし、それでは正しいR構文を「コメント」することしかできません。したがって、優れたエディターが推奨される回避策です。

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

}

9

どんな言語でもこれに応えられないのは信じられないほどだ。

これはおそらく最もクリーンな回避策です。

anything="
first comment line
second comment line
"

3
コメントで引用符が必要な場合を除き、
正常に機能

7

RStudioをインストールするだけで複数行のコードにコメントするためのやりすぎの方法を使用する以外に、Rの構文の強調表示をサポートするNotepad ++を使用できます。

(複数行を選択)->編集->コメント/コメント解除->ブロックコメントの切り替え

最初にコードを.Rソースとして保存する必要があることに注意してください(赤で強調表示)

最初にコードを.Rソースとして保存する必要があることに注意してください(赤で強調表示)


2

私はvimを使用してRスクリプトを編集します。

たとえば、Rスクリプトがtest.Rであり、3つの別々の行に「行1」、「行2」、および「行3」が含まれているとします。

「vim test.R」と入力して、Vimのコマンドラインでtest.Rを開きます。次に、コメントアウトする最初の行に移動し、「Control-V」と入力し、コメントアウトする最後の行に下向き矢印を押し、大文字のIを入力します。つまり、「I」を挿入し、「#」と入力します。エスケープキーを押して、下矢印で選択したすべての行に「#」を追加します。ファイルをVimに保存し、「:wq」と入力してVimを終了します。変更はRstudioに表示されます。

Vimのコメントを削除するには、削除する文字「#」の上にある最初の行から開始し、もう一度「Control-V」を実行して、「#」を削除する最後の行に下向き矢印を押します。次に「dd」と入力します。「#」記号は削除する必要があります。

Vimのtest.Rへの変更がRstudioに反映されるまでに数秒のタイムラグがあります。


0

RStudioこれを行う簡単な方法は、あなたのコメントを書き込むことで、あなたがコードのあなたの行をコメントにCTRL + Shiftキー+ Cを使用していたら、あなたは読みやすくするために複数行にコメントをリフローするCtrl + Shiftキー+ /を使用しています。


-2

Pythonでは、コメントの前後に3つの単一引用符を含む複数行コメントを作成します。私はこれをRで試してみましたが、うまくいくようです。

例えば。

'''
This is a comment
This is a second comment
'''
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.