我开始在R从事蒙特卡洛的业余爱好,但最终一位财务分析师建议迁移到Matlab。我是一位经验丰富的软件开发人员。但是是蒙特卡洛的初学者。我想用灵敏度分析来构造静态模型,然后再构造动态模型。需要指导我的好的库/算法。
在我看来,R具有出色的库,而且我怀疑mathlab被无经验的程序员所青睐,因为它具有类似于pascal的简单语言。R语言是基于方案的,这对初学者来说很难,但对我而言却不是。如果Matlab / Octave在数值/库方面没有优势,我会坚持使用R。
我开始在R从事蒙特卡洛的业余爱好,但最终一位财务分析师建议迁移到Matlab。我是一位经验丰富的软件开发人员。但是是蒙特卡洛的初学者。我想用灵敏度分析来构造静态模型,然后再构造动态模型。需要指导我的好的库/算法。
在我看来,R具有出色的库,而且我怀疑mathlab被无经验的程序员所青睐,因为它具有类似于pascal的简单语言。R语言是基于方案的,这对初学者来说很难,但对我而言却不是。如果Matlab / Octave在数值/库方面没有优势,我会坚持使用R。
Answers:
我都用。我经常在Matlab中对函数和算法进行原型设计,因为如上所述,用一种接近于纯数学语言的语言来表达算法更容易。
R确实具有出色的库。我仍然在学习它,但是我开始把Matlab抛在脑后,因为一旦您知道R,就可以很容易地在那里编写函数原型。
但是,我发现,如果希望算法在生产环境中有效运行,则最好改用C ++之类的编译语言。我有将C ++包装到Matlab和R中的经验(并且在这方面也很出色),但是我对R有更好的体验。 免责声明:作为一名研究生,我没有将DLL的最新版本用于我的dll,我几乎只在Matlab 7.1中工作(大约4岁)。较新的版本可能工作得更好,但是我想到了两种情况,Matlab后面的C ++ dll导致Windows XP蓝屏,因为我不恰当地走出了数组界限-这是一个非常棘手的问题调试是否在每次出错时重新启动计算机...
最后,R社区似乎比Matlab社区拥有更快,更强大的发展势头。此外,由于它是免费的,所以您也无需与Godforsaken flexlm许可证管理器打交道。
注意:目前,我几乎所有的开发都使用MCMC算法。我使用ggplot2在R ++中以可视化方式在C ++中进行了约90%的生产。
并行注释更新:
我目前有相当一部分开发时间用于并行化MCMC例程(这是我的博士学位论文)。我曾经使用过Matlab的并行工具箱和Star P的解决方案(我猜现在是Microsoft拥有的解决方案-哎呀,另一个吞噬了……)我发现并行工具箱是配置的噩梦 -当我使用它时,它需要对每个客户端节点具有root访问权限。我认为他们已经修复了这个小“ bug”,但仍然一团糟。我发现*'p解决方案很优雅,但通常很难描述。我没有用过Jacket,但是我听说过好东西。我也没有使用过并行工具箱的最新版本,该工具箱也支持GPU计算。
我几乎没有使用R并行软件包的经验。
根据我的经验,并行化代码必须在C ++级别上进行,在C ++级别上,您具有对任务分解和内存/资源分配的更好控制粒度。我发现,如果您尝试以较高的级别并行化程序,则通常只会获得最小的加速,除非您的代码易分解(也称为伪并行)。也就是说,您甚至可以使用OpenMP在C ++级别使用单行代码来获得合理的加速:
#pragma omp parallel for
更复杂的方案具有学习曲线,但是我真的很喜欢gpgpu的发展方向。截至今年的JSM,我在R中谈论过GPU开发的少数人都将其称为“深入人心”。但是如上所述,我的经验很少-在不久的将来进行更改。
老实说,我想您在这里问到的关于R vs ...的任何问题都会对R产生偏见。请记住,R是迄今为止使用最多的标签!
我做的事
我目前的工作习惯是在需要进一步提高速度时使用R进行原型制作并使用C。过去,我不得不非常快地切换到C(同样针对我的特定应用程序),但是R 多核库帮助延迟了切换。本质上,您将for
循环与琐碎的更改并行运行。
我应该提到我的应用程序在计算上非常密集。
建议
老实说,这实际上取决于您要做什么。因此,我将根据您问题中的这一陈述回答我。
我想用灵敏度分析来构造静态模型,然后再构造动态模型。需要指导我的好的库/算法
我以为这个问题非常适合在R中进行原型设计,并在需要时(或其他某种编译语言)使用C。
话虽如此,通常蒙特卡洛/灵敏度分析并不涉及特别高级的统计程序-当然,它可能需要其他高级功能。因此,我认为(没有更多信息)您可以使用任何语言进行分析,但是由于存在偏见,我建议您使用R!
尽管我几乎完全使用过R
,但我确实很欣赏Matlab
。
当您的程序运行缓慢时,您通常想知道瓶颈在哪里。Matlab的探查器是实现此目标的绝佳工具,它可以告诉您在代码的每一行上花费了多少时间。
至少对我来说,使用Rprof
是无与伦比的。我不知道哪个电话是瓶颈。使用Rprof
您不会获得有关在每行上花费多少时间的信息,但是会得到在每个基本函数上花费多少时间(或如此)的信息。但是,许多相同的原始函数被许多不同的函数调用。
尽管我建议R
(因为它很棒:免费,功能非常强大……),如果您知道必须对代码进行大量分析,那么Matlab会更好。公平地说,Matlab中有多核和并行计算工具箱(尽管价格昂贵)。
system.time
不同版本之间的差异来进行概要分析。 这是一个有趣的案例研究
我认为Matlab是一种丑陋的语言。也许到目前为止,它已经成为默认参数和命名参数了,但是您在网上找到的许多示例都执行旧的“如果有6个参数,则此,否则如果有5个参数……”和命名参数只是带有交替字符串(名称)和值的向量。那是1970年代,以至于我根本无法使用它。
R可能有它的问题,并且它也很老,但是它建立在前瞻性的基础上(Scheme / Lisp),并且在比较中保持了很好的状态。
就是说,如果您喜欢使用循环等进行编码,Matlab的速度会更快。它具有更好的调试功能。以及更多的交互式图形。另一方面,与R相比,用于记录代码/库的过程相当可笑,并且您为使用Matlab付出了很多钱。
所有IMO。