在R中是否可以使用多行注释?

132

我发现了这个旧帖子(一年前的),它解释了为什么R不支持多行注释(比如PHP中的/* comment */)。

我想知道过去一年里是否已经解决了这个问题,或者是否有其他替代方案? (例如,在notepad++和npptor中,您可以标记一堆行并按ctrl+q将它们全部标记为注释,其他IDE是否有类似的解决方案?)


6
在RStudio中,你只需要以 #' 开头撰写注释,接下来的行就会被自动注释。 - José Vallejo
"bla注释bla运行成功!" - babipsylon
7个回答

171

R Studio(以及Eclipse + StatET):

在Windows上,选中文本并使用CTRL+SHIFT+C来注释多行。

对于macOS,请使用command+SHIFT+C


6
同样适用于删除多行注释的方法。 - Christopher K.
3
这个解决方案并没有解决OP的问题。它只是在每一行前面放置了多个单行注释(#)。我认为OP正在寻找一种指定注释开始和结束的方法,类似于SAS中的以下内容:/*这可以是多行注释,只需要4个字符即可注释整个代码块*/ - StatsStudent
1
它确实回答了问题。OP问道:“我想知道这个问题在过去一年中是否得到解决,或者是否有其他替代方案?”这是一个替代方案。 - derelict

81

如果你想的话,可以使用独立的字符串来表示多行注释——我一直认为这比 if (FALSE) { } 代码块更清晰。该字符串将被评估然后丢弃,因此只要它不是函数中的最后一行,就不会有任何影响。

"This function takes a value x, and does things and returns things that
 take several lines to explain"
doEverythingOften <- function(x) {
     # Non! Comment it out! We'll just do it once for now.
     "if (x %in% 1:9) {
          doTenEverythings()
     }"
     doEverythingOnce()
     ...
     return(list(
         everythingDone = TRUE, 
         howOftenDone = 1
     ))
}
主要限制在于当你注释内容时,你必须注意引号:如果你在内部有一种引号,你必须使用另一种引号进行注释;如果你的代码块中包含“带有'后撤符”的字符串,则这种方法不是一个好主意。但是仍然有if (FALSE) 代码块。
另一个限制是两种方法都具有的:只能在表达式是语法上有效的地方使用这样的块-不能注释列表的某些部分,例如。
关于在哪个IDE中进行操作:我是Vim用户,我发现NERD Commenter 是一个非常出色的工具,可以快速注释或取消注释多行。非常友好,文档很好。
最后,在R提示符下(至少在Linux下),还有可爱的Alt-Shift-# 来注释当前行。如果你在处理单行代码并意识到首先需要准备步骤,那么很好用,可以将一行放在“等待”状态中。

你好Esteis - 关于alt-shift-#,它在Windows上不起作用。我使用“Esc”,我认为它的工作方式与您描述的类似。感谢所有建议。 - Tal Galili
1
在Linux上,像这样插入注释的功能可能是由GNU readline库提供的。如果它在R中可用,那么它很可能也适用于许多其他应用程序,比如bash本身。 - Aaron McDaid
非常好的方法,if false块,谢谢! - Ghost

39
在Eclipse + StatET和Rstudio中,CTRL+SHIFT+C是快捷键。

1
是的!对于多行注释的语言级别限制,最简单的解决方案是使用快捷方式! - Necronet

21
if(FALSE) {
...
}

避免多行代码被执行。然而,这些行仍然必须在语法上正确,即不能是传统意义上的注释。但在某些情况下仍然有用。


1
感谢@caracal,非常有用,如果您想跳过整个代码块,同时非常简单地注释掉,以便另一次处理相同的代码块# if(FALSE){#} - Gabriel123
有没有办法修改这个代码,如果将FALSE更改为TRUE,它会运行花括号内的多行代码而不仅仅是最后一行? - coip

13

自R版本2.12起,不支持多行注释,并且不太可能改变。在大多数环境中,您可以通过高亮显示并切换注释来注释代码块。在emacs中,使用'M-x ;'。


8
将以下内容添加到您的~/.Rprofile文件中:
exclude <-  function(blah) {
    "excluded block"
}

现在,您可以像以下这样排除块:
stuffiwant

exclude({
    stuffidontwant
    morestuffidontwant
})

6

不幸的是,R语言仍然没有多行注释功能。

如果你的文本编辑器支持列模式,可以使用该模式一次添加许多#符号。如果你使用UltraEdit,按下Alt+c即可进入列模式。


UltraEdit还在编辑菜单上拥有一个注释添加命令:Alt+e,n。 - Hong Ooi
1
put everything between " " - babipsylon
1
那应该是被接受的答案。 - buhtz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接