什么是 MATLAB 能做而 R 不能做的?

我经常听到人们抱怨 MATLAB许可证是多么昂贵。然后我想知道为什么他们不只是使用 八度R。但后者正确吗?你能用 R 代替 MATLAB 吗?

225449 次浏览

R 是一个用于统计数据分析和图形的环境。MATLAB 起源于数值计算。如果用于数据操作(例如,矩阵/向量操作) ,基本语言实现有许多共同的特性。

R 具有其他地方很难找到的统计功能(CRAN上的 > 2000个软件包) ,许多统计学家使用它。另一方面,MATLAB 有很多(昂贵的)工具箱用于工程应用程序,比如

  • 图像处理/图像采集,
  • 过滤器设计,
  • 模糊逻辑/模糊控制,
  • 偏微分方程,
  • 等等。

根据我的经验,从 MATLAB 到 Python 是一个更容易的转变—— Python 与 Numpy/scypy在风格和特性方面比 R 更接近 MATLAB。还有开源直接 MATLAB 克隆 八度Scilab

当然有很多 MATLAB 可以做的,R 不能-在我的领域 MATLAB 是用于实时数据采集很多-大多数硬件公司包括 MATLAB 接口。虽然这可能是 R 的可能性,但我想它会涉及到更多的内容。Simulink 还提供了一个完整的功能领域,我认为 R 缺失了这个功能。我相信还有更多的功能,但是我对 R 并不熟悉。

你能用 R 代替 MATLAB 吗?

是的。

我使用 MATLAB 很多年了,但在过去的3年里主要转向了 R 语言。在这一点上,他们有更多的共同点比没有。这部分取决于您的字段和用例。作为 斯宾塞 · 格雷夫斯之前说过,这也取决于“你碰巧经常去哪个教堂”。在你决定之前,最好先看看 MATLAB 工具箱CRAN关于特定任务的对比。

类似的问题 几年前在 R-Help 上问道最近又发生了一次David Hiebeler(在缅因大学)保持着一个广泛的 < b > R/MATLAB 比较 ,并且是关于这个主题的最好的参考。你也可以复习 这种基本函数的比较

以下是我过去观察到的一些事情,它们都不应该成为破坏交易的因素。

  • 一般来说,MATLAB 有一个更好的编程环境(例如,更好的文档,更好的调试器,更好的对象浏览器) ,并且“更容易”使用(如果你愿意,你可以使用 MATLAB 而不用做任何编程)。Simulink允许您通过在图形中连接块来可视化地编程。通过提供更好的 IDE 和改进的调试来实现 革命 R 正在解决其中的一些差异,但它仍然落后一步。
  • 使用常规配置(看看这个基准测试的例子)时,MATLAB 稍微快一些,但是如果出现问题,可以采取一些措施来提高 R 的性能。
  • 因为它是商业化的,所以可以说它有更多的“产品”(在集成附加组件的意义上)和支持(但是你要为它付费)。看看 产品清单。例如,它有类似于 MATLAB 编译器的东西,可以创建可部署的可执行 MATLAB 程序。
  • 就软件包/工具包而言,MATLAB 对物理科学的支持要多得多,而 R 对统计学的支持要强得多,这并不是说其他工具不能完成这些任务。它们都可以很容易地扩展。

因此,如果易用性不是主要关注的问题(而且没有其他商业原因可以避免使用开源工具) ,那么我认为使用 R 确实是有道理的。它周围有一个非常强大的社区(R 邮件列表是惊人的) ,正在迅速发展(见 CRAN) ,它的 自由(这不是一个小问题!).

编辑: 我想再补充一点: 《 用 R 和 MATLAB 进行函数数据分析》一书中有一章是关于“ Matlab 和 R 语言的基本比较”的。这涵盖了一些重要的语法差异(比如对点的解释,或方括号[]的含义)。对于任何对函数式编程感兴趣的人来说,这本书本身都非常值得一读。

作为 MATLAB 和 R 的用户,我认为它们是非常不同的应用程序。我自己有计算机科学的背景,等等,我不禁想到 R 是由统计学家为统计学家,而 MATLAB 是由程序员为程序员。

R 使得可视化和计算各种统计数据变得非常容易,但是如果由我来决定,我不会用它来实现任何与信号处理相关的东西。

总而言之,如果要进行统计,请使用 R。如果你想编程,使用 MATLAB 或一些编程语言。

我用 R 语言和 MATLAB 语言来解决问题和建立与环境工程相关的模型,这两个系统之间有很多重叠的地方。在我看来,MATLAB 的优势在于专门的领域特定的应用程序。例如:

  • 流线等功能,有助于流体动力学研究。

  • 工具箱,如图像处理工具集。我还没有找到一个提供类似分水岭算法这样的工具的等价实现的 R 包。

在我看来,MATLAB 提供了更好的交互式图形功能。但是,我认为 R 可以生成更好的静态打印质量的图形,这取决于应用程序。MATLAB 的符号数学工具箱也比 Ryacas 或 rSymPy 等 R 等同类工具箱集成得更好,能力也更强。MATLAB 编译器的存在还允许基于 MATLAB 代码的系统独立于 MATLAB 环境进行部署——尽管它的可用性将取决于您必须投入多少资金。

另一件我应该注意的事情是 MATLAB 调试器是我使用过的最好的调试器之一。

我在 R 中看到的主要优点是系统的开放性和扩展的容易性。这导致了 CRAN 上包的惊人多样性。我知道 Mathworks 还维护一个用户贡献的工具箱库,我不能作出公平的比较,因为我没有使用它太多。

R 的开放性还扩展到在已编译代码中进行链接。不久前,我有一个用 Fortran 编写的模型,我试图决定是使用 R 还是 MATLAB 作为前端,以帮助准备输入和处理结果。我花了一个小时阅读关于编译代码的 MEX 接口。当我发现我将不得不编写和维护一个单独的 Fortran 例程,做一些复杂的指针杂耍,以管理接口,我搁置了 MATLAB。

R 接口由调用.Fortran ([子例程名] ,[参数列表])组成,它简单而快捷。

简短的回答: 不,当然不是。尽管任何一套数学软件包都有重叠之处,但它们总是对某些问题领域有偏见。这些偏见在您是否想要使用这些包中的一个方面非常重要。

MATLAB 所能做到的 R 所不能做到的一个例子是与实时硬件的接口,用于信号处理/采集和控制。MATLAB 中的 Simulink模型可以被配置为在你的机器上运行模拟程序,然后编译代码在实际系统上执行,将测量数据作为输入并计算适当的输出(在控制系统的模拟之前,现在是一个完全运行的系统)。有了适当的硬件板在您的机器上,您可以通过 PC 运行实时控制系统。

相比之下,R 似乎牢牢地定位于统计学的角色,我确信它在这方面的性能优于 MATLAB。类似地,Mathematica在符号数学方面比 MATLAB 好; Python 在一般编程方面比 MATLAB 好; Gnuplot在实际创建图形方面比他们所有人都好(呃,我假设) ; 等等。

我们不能这样做,因为这是顾客所期望的/要求的。

我同意上面给出的许多答案。由于答案是特定于 MATLAB 和 R 功能的差异,我将提到一个非常重要的问题: MATLAB 包含一个 JVM,并且与 Java 具有完美和健壮的互操作性。MATLAB 用户可以访问 Java 的所有庞大库。MATLAB IDE 几乎可以用作穷人的 Eclipse。相比之下,rJava 非常不成熟,尽管它的创造者(Roman Francois)作出了非常有价值的努力。

与 R 相比,MATLAB 的一大优势是 MATLAB 文档的质量。作为开放源码,R 在这方面受到了影响,这是许多开放源码项目共有的特性。

然而,R 是一种非常有用的环境和语言。它被广泛应用于生物信息学领域,并且在这个领域有许多有用的软件包。

另一种替代 R 是 八度(http://www.gnu.org/software/octave/) ,它非常类似于 MATLAB,它可以运行 MATLAB 脚本。

使用 sqldf 包,R 不仅能够进行统计,还能够进行严肃的数据挖掘——假设您的机器上有足够的 RAM。

使用 RServe 包 R 可以成为一个常规的 TCP/IP 服务器; 因此您可以在 java 之外调用 R (或者其他任何语言,如果您有 api 的话)。在 R 中还有一个调用 java out 或 R 的包。

对交互式图形的支持在 matlab 中比在 R 中要好得多。我讨厌 matlab 作为一种语言,但是当我看到它的用户如何用鼠标操作来探索数据时,我很嫉妒,而我正忙着重复带有 xlim等新值的命令。Matlab 对多面板图的处理也比任何用于任务的 R 方法都要好得多。一般来说,R 图形有一种1960年代的感觉。它适合于发布,但不是交互式数据探索的最佳解决方案。