10

Roxygen 注释涉及在行前加上#'. 在为函数编写和测试示例时,能够打开和关闭注释非常好。我可以复制和粘贴代码来回转发到 vim 并删除或添加这些注释,但这不是很优雅。

  • 有没有简单的方法可以在 Rstudio 中切换 roxygen 评论?
  • 或者,是否有另一种方法可以有效地运行由 roxygen 注释字符注释掉的示例 R 代码?

更新:横向思考,我认为 using@example examples/foo.r是避免对实际示例代码使用 Roxygen 注释的另一种方法(即,通过从文件中获取示例,即,examples/foo.r)。

4

2 回答 2

3

关于您提出的替代方案:

  • 或者,是否有另一种方法可以有效地运行由 roxygen 注释字符注释掉的示例 R 代码?

如果您在 Roxygen2@examples块中按 CTRL+[Enter],Rstudio 会将选定的代码(行或突出显示的部分)发送到 R 控制台。要使用,只需@examples在您的 roxygen 注释代码之前的行上声明代码块。

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

您可以@examples在代码中的任何位置放置一个块。如果您正在开发一个包并且您将该块用于其预期目的,这将成为一个拖累。

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

于 2014-10-24T11:37:25.560 回答
2

您可以编写自己的函数,从 R 文件中提取示例代码。这类似于purlin knitpackage 或Stangle. 这是您可以执行的操作的示例。该功能效率不高,但我写它只是为了展示这个想法。这应该是一个很好的起点。它还假设您已经获取了 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
于 2013-10-05T10:42:08.217 回答