解决方案

为什么 Mathematica 用户会关心R?

从 Mathematica 链接到其他语言和工具的好处因情况而异。但不同寻常的是,在 Mathematica 9的新 RLink (https://www.wolfram.com/mathematica/new-in-9/built-in-integration-with-r/) 中,它的真正好处在于它与 R 社区的联系。

当我们第一次为 C 添加 MathLink 库时,在进行密集的数值计算方面有真正的好处(尽管多年来 Mathematica 的性能改进和编译器的发展已经大大减少了这方面需要付出努力的机会)。创建 Excel Link 为 Mathematica 前端添加了一个替代接口的范例。

然而,有了 RLink,我现在可以通过他们创建的附加库立即访问 R 社区的工作,所有这些内容都可以立即用于 Mathematica环境,并通过R语言运行时进行解释。

让我们看一个简单的例子。虽然 Mathematica 支持 FisherRatioTest,但它不知道确切的 Fisher 检验。(这是一个假设检验,其中的零假设是具有固定边际的列联表中的行和列是独立的。)

好吧,现在有了。

找到合适的库比给 Tank 打电话 (《黑客帝国》电影中的典故 https://www.youtube.com/watch?v=6AOpomu9V6Q) 更费事,我跳过了任何错误检查。但唯一复杂的一点是从结果中提取 p值(“[[1,1,1]]”部分),因为RFunction返回一个包含额外元数据的RObject。当然,这里并不是我关心的。

我现在可以像使用任何内置函数一样使用它。

我可以绘制它:

我可以操纵它:

我可以以类似的方式将它与其他语言的库一起使用:

未来总是难以预测。当我(许多)年前开始在这里工作时,到 FORTRAN 的一般链接似乎是最重要的事情,但没有人再问我这个问题—— C 和 Java 链接是最受欢迎的。某些特定库(BLAS/LAPACK、GMP 等)的链接最终成为 Mathematica 中的核心基础设施组件。

R 代码不会处理符号参数或高精度数字,因此,为了稳健性,您需要比使用Mathematica代码更仔细地进行类型检查。