我经常听到人们抱怨MATLAB许可证多么昂贵。然后我想知道为什么他们不只使用Octave或R。但后者对吗?你能用 R 代替 MATLAB 吗?
11 回答
你能用 R 代替 MATLAB 吗?
是的。
我使用 MATLAB 多年,但在过去 3 年主要转向 R。在这一点上,他们有更多的共同点。这部分取决于您的领域和用例。正如斯宾塞格雷夫斯之前所说,这也取决于“你经常去哪个教堂”。最好在决定之前 查看MATLAB 工具包与CRAN的具体任务。
几年前和最近在 R-Help 上提出了一个类似的问题。 David Hiebeler(缅因大学)对R/MATLAB 进行了广泛的比较,是该主题的最佳参考。您还可以查看此基本功能的比较。
以下是我过去观察到的一些事情,它们都不应该破坏交易。
- 一般来说,MATLAB 具有更好的编程环境(例如,更好的文档、更好的调试器、更好的对象浏览器)并且“更容易”使用(如果您愿意,您可以使用 MATLAB 而无需进行任何编程)。 Simulink允许您通过连接图形中的模块来进行可视化编程。 REvolution R 正在通过提供更好的 IDE 和改进的调试来解决其中的一些差异,但它仍然落后了一步。
- MATLAB 在正常配置下要快一些(请参阅此基准以获取示例),尽管如果这成为问题,可以采取一些措施来提高 R 性能。
- 由于它是商业的,因此它也可以说有更多的“产品”(在集成附加组件的意义上)和支持(但你需要付费)。请参阅产品列表。例如,它有诸如MATLAB 编译器之类的东西,它可以创建可以部署的可执行 MATLAB 程序。
- 就软件包/工具包而言,MATLAB 对物理科学的支持要多得多,而 R 对统计学的支持要强得多,这并不是说其他的不能执行这些任务。它们都可以很容易地扩展。
所以,如果易用性不是主要问题(并且没有其他商业理由避免使用开源工具),那么我认为使用 R 是一个真实的案例。它有一个非常它周围有强大的社区(R 邮件列表很棒),正在迅速发展(参见 CRAN),而且它是免费的(这不是一个小问题!)。
编辑:我只想再补充一点:“使用 R 和 MATLAB 进行功能数据分析”一书包括关于“Matlab 和 R 语言的基本比较”的一章。这涵盖了一些重要的语法差异(例如点的解释,或方括号 [] 的含义)。对于任何对函数式编程感兴趣的人(无论使用哪种语言),这本书本身都非常值得一读。
R 是用于统计数据分析和图形的环境。MATLAB 起源于数值计算。如果您将基本语言实现用于数据操作(例如,矩阵/向量操作),它们具有许多共同的特性。
R 具有在其他地方很难找到的统计功能(CRAN上 >2000 个包),并且许多统计学家都在使用它。另一方面,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 文档的质量。R 作为开源,在这方面受到了影响,这是许多开源项目共有的特性。
然而,R 是一种非常有用的环境和语言。它广泛用于生物信息学社区,并且在该领域有许多有用的软件包。
R 的替代品是Octave ( http://www.gnu.org/software/octave/ ),它与 MATLAB 非常相似,它可以运行 MATLAB 脚本。
根据我的经验,从 MATLAB 迁移到 Python 是一个更容易的过渡 - 带有numpy/scipy的 Python 在样式和功能方面比 R 更接近 MATLAB。还有开源的直接 MATLAB 克隆Octave和Scilab。
MATLAB 可以做很多 R 做不到的事情——在我的领域,MATLAB 被大量用于实时数据采集——大多数硬件公司都包含 MATLAB 接口。虽然这可能与 RI 一起实现,但想象它会涉及更多。Simulink 还提供了我认为 R 缺少的整个功能领域。我确信还有更多,但我对 R 不太熟悉。
简短的回答:不,当然不是。尽管任何一组数学软件包都会有重叠,但它们总是会偏向某些问题领域。这些偏见在您是否要使用这些软件包之一方面很重要。
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)做出了非常宝贵的努力。
我们不能,因为这是我们客户的预期/要求。
使用 sqldf 包,R 不仅可以进行统计,还可以进行严肃的数据挖掘——假设您的机器上有足够的 RAM。
并且通过 RServe 包,R 变成了一个常规的 TCP/IP 服务器;所以你可以用java(或任何其他语言,如果你有api)调用R。R中还有一个包可以调用java out或R。
作为 MATLAB 和 R 的用户,我认为它们是非常不同的应用程序。我自己有计算机科学等方面的背景,我不禁认为 R 是统计学家为统计学家设计的,而 MATLAB 是程序员为程序员设计的。
R 使得可视化和计算各种统计数据变得非常容易,但如果由我决定,我不会用它来实现任何与信号处理相关的东西。
综上所述,如果你想做统计,就用R。如果你想编程,用MATLAB或者一些编程语言。
在 matlab 中对交互式图形的支持比在 R 中要好得多。我讨厌 matlab 作为一种语言,但是当我看到它的用户如何使用鼠标操作探索数据时,我很嫉妒,而我正忙着用新的值重复命令xlim
等。 Matlab 还比任何 R 方法更好地处理多面板图。通常,R 图形具有 1960 年代的感觉。它适合发布,但不是交互式数据探索的最佳解决方案。