Roxygen注释涉及以#'
为前缀行。在编写和测试函数示例时,能够打开和关闭注释真是太好了。我可以将代码来回复制和粘贴到 vim 并删除或添加这些注释,但这不是很优雅。
- 有没有简单的方法可以在 Rstudio 中切换 roxygen 注释?
- 或者,是否有另一种方法可以有效地运行被 roxygen 注释字符注释掉的示例 R 代码?
更新:横向思考,我认为使用 @example examples/foo.r
是一种避免在实际示例代码中使用 Roxygen 注释的替代方法(即,通过从文件中获取示例,即 examples/foo.r
)。
关于您提出的替代方案:
- 或者,是否有另一种方法可以有效地运行被 roxygen 注释字符注释掉的示例 R 代码?
如果在 Roxygen2 @examples
块中按 CTRL+[Enter],Rstudio 会将选定的代码(行或突出显示的部分)发送到 R 控制台。要使用,只需在 roxygen 注释代码前面的一行上声明@examples
代码块。
#' @examples
#' ... your original roxygen commented code ...
您可以在代码中的任何位置放置@examples
块。如果您正在开发一个包并且您正在将该块用于其预期目的,这将成为一个拖累。
如果您正在寻找一种切换代码的方法,我会使用@Roman在您的问题的评论中提出的方法。
可以编写自己的函数,从 R 文件中提取示例代码。这类似于knit
包或Stangle
中的purl
。这是您可以执行的操作的示例。该函数效率不高,但我编写它只是为了展示这个想法。这应该是一个很好的起点。它还假定你已获取 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