多行评论解决方法?


108

我(有点)已经知道这个问题的答案。但是我认为这是R用户列表中经常被问到的问题,应该有一个可靠的好答案。 据我所知,R中没有多行注释功能。那么,有人有什么好的解决方法吗?

尽管R中很多工作通常涉及交互式会话(这使人们对多行注释的需求产生怀疑),但有时我不得不将脚本发送给同事和同学,其中很多涉及不平凡的代码块。对于来自其他语言的人来说,这是一个很自然的问题。

过去我使用引号。由于字符串支持换行符,因此使用

"
Here's my multiline comment.

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

工作良好。有谁有更好的解决方案?

Answers:


50

这确实相当定期地出现在邮件列表中,例如,参见r-help上的该最新线程。共识答案通常是上面显示的答案:鉴于该语言没有直接支持,您必须

  • 与具有区域注释命令的编辑器一起使用,大多数高级R编辑器可以
  • 使用if (FALSE)前面建议的构造,但请注意,它仍然需要完整的解析,因此在语法上必须正确

谢谢。您是否介意多行注释是否有前景,是否有哲学意义等方面的扩展?
HamiltonUlmer

1
我认为这是由于解析器的性质以及R也是一个交互式环境(即命令行)而不是主要是基于文件的解释器(多行注释会更常见)的事实。所以不是哲学的-它以这种方式增长。
Dirk Eddelbuettel

既然R已经编译了代码,我们是否认为多行注释会出现?
Ari B. Friedman

否,因为基础解析器未更改。
Dirk Eddelbuettel 2011年

刚刚发布了一个不需要正确语法的答案,尽管它比这里简单的代码块启用/禁用切换更多地用于此处字符串类型的文档记录和注释。
Thell 2012年


36

我刚刚发现的RStudio的一个巧妙技巧是使用它,#'因为它会创建一个自扩展的注释部分(当您从这样的行返回新行或将新行插入该部分时,它会自动注释)。


1
+1,但我首先弄错了–也许这更#'
容易理解

这很整齐!太好了 有人应该将此答案与@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,我们也没有多行注释或here-字符串,但是在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 2012年

1
您实际上需要对arg做任何事情吗?Comments=function(x){}适用于x以反引号分隔的多行表达式。它不会尝试对其进行评估……
Spacedman

当空括号不包含invisible()时,带有回显的源显示NULL
Thell 2012年

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
除非您想在评论中加引号,否则工作正常;)
abalter

7

除了仅通过安装RStudio使用过分的注释多行代码的方法外,您还可以使用Notepad ++,因为它支持R的语法突出显示

(选择多行)->编辑->注释/取消注释->切换块注释

请注意,您需要先将代码另存为.R源(以红色突出显示)

请注意,您需要先将代码另存为.R源(以红色突出显示)


2

我用vim编辑R脚本。

假设R脚本是test.R,在3条单独的行中包含“ Line 1”,“ Line 2”和“ Line 3”。

我在Vim的命令行中通过输入“ vim test.R”打开test.R。然后我转到要注释掉的第一行,键入“ Control-V”,向下箭头指向要注释掉的最后一行,键入一个大写字母I,即“ I”作为插入,键入“#”,然后按Escape键,将“#”添加到我通过向下箭头选择的每一行中。将文件保存在Vim中,然后通过键入“:wq”退出Vim。更改应显示在Rstudio中。

要删除Vim中的注释,请从要删除的字符“#”顶部的第一行开始,再次执行“ Control-V”,然后向下箭头至要删除“#”的最后一行。然后输入“ dd”。“#”符号应删除。

在更改测试之间有几秒钟的延迟时间。Vim中的R反映在Rstudio中。


0

RStudio中,执行此操作的一种简单方法是编写注释,并在使用CTRL + Shift + C注释代码行之后,然后使用CTRL + SHIFT + /将注释重排到多行以便于阅读。


-2

在Python中,您可以在注释前后加上3个单引号的多行注释。我在R中试过了,它似乎也可以。

例如。

'''
This is a comment
This is a second comment
'''
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.