← 最新论文
💻 computer science

r2py: AI-Assisted Conversion of R Statistical Packages to Python

本文介绍了 r2py,这是一个由人类监督的 AI 智能体框架,它通过编排一个多阶段的转换与严格验证过程,将 R 统计软件包转换为原生 Python 库,同时保留编译代码并确保其相对于原始实现的数值正确性。

原作者: Jun Li, Yufei Cai

发布于 2026-08-19
📖 1 分钟阅读☕ 轻松阅读

原作者: Jun Li, Yufei Cai

原始论文采用 CC BY 4.0 许可(https://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

在数据分析的世界里,长期以来一直由两种截然不同的语言占据主导地位。一种被称为 R,它是统计学的历史故乡,理解世界的各种新数学方法通常首先在这里编写完成。它是科学家的参考库,拥有数千种经过数十年审查和信任的专业化工具。另一种是 Python,它已成为现代计算、机器学习以及构建运行在现实世界中的软件的标准。多年来,这两个世界一直平行存在。当一名使用 Python 的研究人员需要一种仅在 R 中存在的特定统计方法时,他们面临着艰难的选择。他们可以尝试让两种语言并排运行,但这很笨拙且需要繁重的软件安装;或者他们可以尝试从头开始用 Python 重写 R 代码。后者是一项庞大且易出错的任务,往往无法捕捉到原始工具的细微行为。

一组研究人员现在开发了一种弥合这一差距的新方法,不是通过强迫两种语言共存,而是通过将统计工具本身转化为原生的 Python 代码。他们创建了一个名为 r2py 的系统,该系统利用人工智能将 R 包转换为 Python 库,这些库无需安装原始 R 软件即可运行。研究人员在两个广泛应用于科学领域的重大且复杂的统计包上测试了该系统。结果是一套行为几乎与其 R 原型完全一致的 Python 工具,允许科学家在现代 Python 环境中使用数十年的统计创新成果。

这项工作的核心挑战在于,R 和 Python 不仅仅是同一种语言的不同方言,它们是具有各自规则的根本不同的系统。在 R 中,一个计算方差的简单命令可能会应用某种特定的修正,而 Python 默认并不使用这种修正。在 R 中,一个函数可能会按特定顺序返回结果列表,而 Python 则期望不同的结构。如果人类尝试手动翻译这些工具,可能会忽略这些细微差别,导致代码看起来正确但产生略微错误的数据。在科学领域,微小的数值误差就可能改变结论,因此这是不可接受的。此外,许多 R 包依赖于使用 C 或 Fortran 等语言编写的旧编译代码来执行繁重的计算。仅仅翻译高层指令是不够的;系统还必须弄清楚如何将新的 Python 代码连接到这些旧的、快速的计算引擎上。

为了解决这个问题,研究人员构建了一个框架,将翻译过程分解为七个不同的步骤,由人类专家引导并由人工智能代理执行。系统并不是要求计算机一次性翻译一整本代码书,而是首先绘制出包的结构图,理解哪些函数依赖于其他函数。然后,它会为 R 代码中发现的每一种命令类型创建一个详细的指南,在任何实际翻译开始之前,精确决定每种命令在 Python 中应如何呈现。这确保了相同的 R 命令始终以相同的方式被翻译,从而防止了因分别处理代码的不同部分而产生的这种不一致性。

一旦计划制定完毕,系统就会按正确的顺序逐个函数地进行翻译。至关重要的是,它并不试图重写已经用编译代码编写的沉重数学计算。相反,它保持原始的、快速的代码原封不动,并在 Python 中构建一个新的桥梁来调用它。对于他们测试的其中一个包,这个过程非常直接。而对于另一个使用了更复杂方式与其内部代码通信的包,系统必须首先重建一个小型、自包含的 R 系统内部语言版本,以便旧代码能够在没有原始 R 软件存在的情况下运行。这使得新的 Python 包能够使用与原始版本完全相同的计算引擎,从而确保任何结果上的差异仅来自于翻译,而非数学逻辑的变化。

随后,研究人员对这些新包进行了严格的一系列测试。他们不仅检查代码是否能运行,还将新 Python 工具产生的数字与原始 R 工具产生的数字在数百个不同场景下进行了对比。他们测试了标准情况、困难的边缘情况,甚至包括工具产生的错误信息。在一个包中,他们运行了 846 次独立的测试;在另一个包中,他们运行了 518 次。结果显示,新的 Python 工具以极高的精度重现了原始 R 的结果,其数值匹配度在科学工作可接受的微小误差范围内。

然而,这一过程也表明,翻译并非在每一个细节上都完美无缺。在少数特定情况下,新工具产生的结果与原始工具略有不同,但这些差异仅在于如果不改变工具的基本性质就无法修复。例如,原始的 R 工具会完整显示用户输入的命令,这一特性依赖于 R 系统对用户输入的记忆。而新的 Python 工具由于只能看到最终计算出的数值,因此无法重现那段精确的文本显示。研究人员识别出了这些差异并进行了清晰的记录,而不是试图掩盖它们。他们还发现原始 R 代码中存在一个真正的缺陷,该缺陷在特定情况下会导致微小的错误;因为他们的目标是创建一个忠实的副本,所以他们在新的 Python 版本中也完全重现了这个缺陷,从而确保使用新工具的科学家能获得与使用旧工具时相同的结果。

最令人惊讶的发现来自于测试过程本身。研究人员发现,捕捉隐藏错误的最佳方法不是编写新的测试,而是翻译 R 包自带的原始测试。这些旧测试是由原始作者编写的,用于检查非常特定且异常的情况,而一个新的翻译者可能永远不会想到去测试这些情况。通过运行这些翻译后的测试,系统发现了一些即使经过所有其他检查仍能幸存下来的微妙漏洞,其中包括一个关于控制参数计算的隐藏错误,该错误仅在极其深层的复杂计算中才会出现。这证实了原始测试套件是翻译过程中不可或向缺少的环节,作为一个安全网,捕捉到了任何人类检查都无法发现的问题。

这项工作证明,将复杂的统计软件从一种语言转换为另一种语言是可能的,但这需要一种严谨、循序渐进的方法,而非简单的自动化翻译。研究人员不仅仅是转换了两个包,他们还建立了一套可以应用于其他对象的通用方法。他们展示了通过将规划、规则翻译和结果验证分离,并保持沉重的计算引擎不受触动,是能够创建出忠实于其 R 起源的原生 Python 工具的。转换后的包现在已开放供所有人使用,可以像任何其他 Python 软件一样进行安装,从而在无需安装原始沉重软件的情况下,将数十年的统计创新引入现代计算环境。该项目的成功表明,只要在翻译过程中保持细致、结构化并致力于数值准确性,统计学的过去与计算技术的未来之间的障碍比人们预想的要容易逾越。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →