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

是否存在可获取给定函数roxygen详情的R语言函数?

获取R函数的Roxygen注释信息

首先明确:未打包脚本中的函数本身不会携带Roxygen注释信息——Roxygen只是一种注释规范,只有在构建包时才会被转换成帮助文档绑定到函数上。不过针对不同场景有对应的解决方案:

1. 已打包R包中的函数

如果函数属于已构建的R包,可以直接提取已生成的帮助文档,完全不需要解析文本:

# 以dplyr::mutate为例,先获取帮助文档对象
help_file <- utils:::.getHelpFile(help("mutate", package = "dplyr"))

# 提取描述、参数等信息
description <- help_file$title
params <- lapply(help_file$arguments, function(arg) paste(arg$name, arg$description))
output <- help_file$value  # 对应@output或@return的内容

也可以用tools::Rd_db()批量提取整个包的所有函数文档:

rd_database <- tools::Rd_db("dplyr")
# 提取mutate的文档
mutate_doc <- rd_database[["mutate.Rd"]]

2. 未打包脚本中的函数

脚本里的Roxygen注释只是普通注释,无法直接从函数对象获取,但可以用roxygen2包的官方解析工具来处理,不用自己写正则:

library(roxygen2)

# 定义提取函数
get_roxygen_info <- function(func_name, script_path) {
  # 解析脚本并保留源代码信息
  parsed_script <- parse(script_path, keep.source = TRUE)
  parse_data <- getParseData(parsed_script)
  
  # 定位函数定义的行号
  func_row <- parse_data[parse_data$text == func_name & parse_data$token == "SYMBOL_FUNCTION_CALL", "line1"]
  if (length(func_row) == 0) stop("函数未找到")
  
  # 筛选函数上方的Roxygen注释
  comment_lines <- parse_data[parse_data$line1 < func_row & parse_data$token == "COMMENT", "text"]
  roxygen_lines <- grep("^#'", comment_lines, value = TRUE)
  clean_lines <- gsub("^#' ?", "", roxygen_lines)
  
  # 用roxygen2官方工具解析注释
  parsed_roxygen <- parse_roxygen(clean_lines)
  
  # 整理成你需要的格式
  list(
    description = parsed_roxygen[[1]]$value,
    param = paste(parsed_roxygen[parsed_roxygen$tag == "param", ]$variable, 
                  parsed_roxygen[parsed_roxygen$tag == "param", ]$value, 
                  collapse = "; "),
    output = parsed_roxygen[parsed_roxygen$tag == "output", ]$value
  )
}

# 调用示例(假设你的脚本叫"my_functions.R")
info <- get_roxygen_info("fun", "my_functions.R")
print(info)

这个方法用roxygen2的原生解析逻辑处理注释,避免了自己写复杂的文本匹配代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:30:34