我经常听到有人抱怨MATLAB许可证有多贵.然后,我不知道为什么他们不只是用八度或[R .但后者是对的吗?你能用R代替MATLAB吗?
你能用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的符号数学工具箱也比R等效项(例如Ryacas或rSymPy)更好地集成和更强大.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不太熟悉.
简短回答:不,当然不是.虽然任何一套数学软件包都会有重叠,但它们总是会对某些问题域产生偏差.这些偏见强烈表明您是否要使用其中一个包.
MAT不能做的事情就是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.