如何在Rstudio中切换roxygen注释?

11
Roxygen注释需要在行前加上#'。在编写和测试函数示例时,可以切换注释以便于开启或关闭。我可以将代码复制粘贴到vim中来添加或删除这些注释,但这并不太优雅。
  • 有没有一种简单的方法可以在Rstudio中切换Roxygen注释?
  • 或者,是否有另一种有效的方法来运行被Roxygen注释字符注释掉的示例R代码?

更新:思考后,我认为使用@example examples/foo.r是一种避免使用Roxygen注释实际示例代码的替代方法(即通过从文件中源化示例,例如 examples/foo.r)。


2
我曾经看到有人用 if(TRUE/FALSE) {} 来注释代码。你可以用一个字母来切换它。 - Roman Luštrik
2个回答

4

关于您提出的替代方案:

  • 是否有其他有效的方法可以运行roxygen注释字符注释的示例R代码?

如果在Roxygen2 @examples块内按下CTRL+[Enter],Rstudio将向R控制台发送所选代码(行或高亮部分)。只需在您的roxygen注释代码前声明@examples代码块即可使用。

#' @examples
#'   ... your original roxygen commented code ...

您可以在代码中的任何位置放置一个@examples块。如果您正在开发一个包并且正在使用该块进行其预期用途,则这将变得很麻烦。

如果您正在寻找一种切换代码的方法,我建议使用@Roman在您的问题评论中提出的方法。


2

您可以编写自己的函数,从R文件中提取示例代码。这类似于knit包或Stangle中的purl。以下是一个示例,展示了您可以做什么。该函数并不高效,但我只是为了展示这个想法而编写它。这应该是一个很好的起点。它还假定您已经在R会话中源化了您的R文件,或者至少文档化的函数已经存在于R会话中。

purl.examples <- function(fileName){
  ll <- readLines(fileName)
  ex.lines <- grep('@examples',ll)   ## get the example's lines
  ## for each example loop till
  ## there is no comment (inefficient)
  examples  <- lapply(ex.lines , function(x){
    i <- x+1
    code <- list()
    while(grepl("#'",ll[i])){
      l <- c(code,gsub("#'","",ll[i],fixed=TRUE))
      i <- i+1      
    }
    code
  })
}

例如,您可以像这样调用它:

lapply(purl.examples('code.R'), 
       function(ex) eval(parse(text=ex))) ## safer to use evaluate package here

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