跳转到内容
cd /languages
  • 统计计算
  • 编程语言
  • AST 和符号支持

Maguyva 的 R 支持:面向分析与包代码的代码图谱

Maguyva 以 AST、符号和图谱支持 R,让 AI 智能体跨越 R 脚本和包追踪函数、S3 与 S4 分派以及模型拟合调用。

R 让浅层 AI 工具栽跟头的地方

R 把基础函数、包函数和你自己的函数放在同一个扁平命名空间里。点号是名字的一部分,而不是成员访问:is.na、data.frame 和 print.summary_table 都是单个标识符。把 print.summary_table 读成 print 上方法的工具会弄错结构,而记录每个基础调用的工具会把你的函数埋在 c() 和 paste() 底下。

Maguyva 保持 R 名称完整,并过滤基础函数噪声,让智能体看到分析真正依赖的函数。

Maguyva 在 R 中提取什么

Maguyva 把 .R、.Rmd 和 .Rnw 文件映射为 R。赋值给名字的函数(如 clean_survey <- function(df))会以该名字提取,匿名函数不视为定义。带点号的名字永远不会被拆成接收者和成员。

一些基础 R 调用会被刻意保留在图谱中,因为它们展示了分析代码的连接方式:S3 与 S4 分派(UseMethod、standardGeneric)、apply 家族(lapply、sapply、vapply、mapply)、模型拟合(lm、predict、anova)、包加载(library、require),以及用 tryCatch 进行的错误处理。

图谱还会记录实例化和读写。

智能体提示词示例

  • “谁调用了 clean_survey,哪些模型使用了它的输出?”(先用 find_symbol,再用 dependency_search 的 incoming 方向)
  • “哪些函数调用了 fit_model?”(dependency_search)
  • “追踪从 load_raw_data 到最终回归的路径。”(get_task_context)

已知限制

  • 约 800 个基础 R、stats 和 graphics 名称会从关系中过滤掉,例如 print、paste、c、data.frame、绘图调用和随机数生成函数。查找它们请使用 text_pattern_search。
  • R 用普通函数调用来创建类和加载包,因此 structural_search 中的 classes、imports 和 variables 预设什么也选不到。请使用 find_symbol 和 text_pattern_search。
  • .Rmd 和 .Rnw 文件会整体按 R 语法读取,而不是逐个代码块读取,因此 R Markdown 和 Sweave 文档的结果可能不完整。
  • R 没有装饰器语法,因此装饰器关系被标记为不适用。

后续步骤

通过快速入门连接仓库,然后在兼容性页面查看支持矩阵。混合数据科学仓库也请阅读 Python 指南。

最适合场景

  • > 拥有大量导出函数、S3 方法和内部辅助函数的 R 包。
  • > 拆分在多个脚本中、共享数据清洗和建模函数的分析流水线。
  • > 把 R 代码交给 AI 智能体、需要看清哪些函数为哪些模型提供输入的数据团队。

智能体工作流

  • > 在修改数据清洗函数返回的列之前,找到它的所有调用方。
  • > 追踪哪些函数通过 `UseMethod` 分派,以及它们的方法在哪里。
  • > 梳理从原始数据加载到拟合模型的路径。

引擎细节

  • > R 支持把 `.R`、`.Rmd` 和 `.Rnw` 映射为 R。赋值给名字的函数会以该名字提取,`data.frame` 这样带点号的名字保持完整。
  • > S3 与 S4 分派(`UseMethod`、`standardGeneric`)、apply 家族、`lm`、`predict` 和 `tryCatch` 会被刻意保留在图谱中。
  • > 约 800 个基础 R、`stats` 和 `graphics` 名称(如 `print`、`paste` 和 `c`)会从关系中过滤掉。

常用 MCP 入口工具

  • find_symbol

    需要清洗、建模或 S3 方法名的定义和调用方时使用它。

  • dependency_search

    修改辅助函数的输出之前,对它使用 incoming 方向遍历,查看哪些分析依赖它。

  • get_task_context

    用于“追踪从原始数据加载到最终回归的路径”这类提示词。