You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为R包roxygen2的@examples自动生成控制台输出?

自动生成roxygen2 @examples的代码执行输出

方法一:利用devtools工具生成带输出的示例

  1. 先在函数的roxygen注释中写好纯R代码示例(不要手动添加#>输出):
#' 计算向量的平均值
#' @param x 数值向量
#' @return 向量的平均值
#' @examples
#' x <- 1:5
#' mean(x)
#' @export
my_mean <- function(x) {
  mean(x)
}
  1. 在R控制台运行devtools::run_examples("my_mean"),该命令会执行示例代码并输出带#>标记的完整内容,示例输出如下:
#> x <- 1:5
#> mean(x)
#> [1] 3
  1. 将这段输出复制替换到原@examples部分即可。后续代码变更时,重复此步骤就能快速更新输出内容。

方法二:通过脚本自动生成并更新注释

如果想实现完全自动化,可以编写一段小脚本,自动捕获示例代码的执行输出并替换roxygen注释:

# 指定要处理的函数名
func_name <- "my_mean"

# 读取函数文件并提取现有示例代码
func_file <- paste0("R/", func_name, ".R")
file_content <- paste(readLines(func_file), collapse = "\n")
roc_obj <- roxygen2::roc_proc_text(roxygen2::rd_roc(), file_content)[[1]]
current_examples <- roc_obj$examples

# 执行示例代码并捕获输出
output <- capture.output(eval(parse(text = current_examples)))

# 整理成带#>的格式
formatted_lines <- c(strsplit(current_examples, "\n")[[1]], output)
formatted_output <- paste0("#> ", formatted_lines)

# 替换原文件中的@examples块(需根据实际文件结构调整替换逻辑)
new_content <- gsub(
  pattern = "@examples\n(.*?)(?=@|$)",
  replacement = paste0("@examples\n", paste(formatted_output, collapse = "\n")),
  x = file_content,
  perl = TRUE
)

# 写入更新后的内容
writeLines(new_content, func_file)

注意事项

  • 禁止在@examples中使用R Markdown代码块(如````{r}`),R CMD check会将其视为纯R代码执行,引发语法错误。
  • 确保示例代码可重复执行,若涉及随机数,需提前设置种子(set.seed())避免输出波动。

内容的提问来源于stack exchange,提问作者Greg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:17:17