Clojure与R:数据分析的优缺点


39

我有一个在不久的将来学习R的计划。阅读另一个我发现有关Clojure的问题。现在我不知道该怎么办。

我认为R对我而言的一大优势是,经济学领域的某些人使用了R,包括我的一位主管(尽管另一位主管说:远离R!)。一个Clojure的优势在于它是基于Lisp的,和我已经开始学习Emacs和我热衷于写我自己的定制,这将是有益的(是的,我知道的Clojure和elisp的是Lisp语言的不同方言,但他们Lisp和类似的东西我都会想到)。

我不能问哪个更好,因为我知道这是非常个人的事,但是有人可以给我Cloclore x R的优点(或优点),特别是在实践上吗?例如,哪个应该更容易学习,哪个更灵活或更强大,哪个具有更多的库,更多的支持,更多的用户等等?

我的预期用途:我的估算工作大部分应使用Matlab进行,因此我在统计分析方面并没有寻找太深的东西,而希望使用Excel代替初始数据处理和可视化,汇总统计信息和图表,还要进行一些基本的统计分析或初步估算。


10
如果您喜欢R,很有可能您会从MATLAB辞职(就我而言)。

IMO,这应该是社区Wiki(语言“与”类型的问题相当主观)。
Shane 2010年

这绝对是与编程语言有关的问题,应在堆栈溢出中提出。
沙皮犬

我同意夏皮。@Vivi:您应该将问题标题更改为“数据处理的优点和缺点”或类似的名称,以使它更具话题性。
Shane 2010年

5
@ Sharpie,@ Shane IMO在某种程度上是关于工具的问题,因此可以接受。

Answers:


27

首先,我要说两种语言都爱:您不会错,而且它们在数据分析方面肯定比C ++或Java更好。

对于基本数据分析,我建议使用R(尤其是plyr)。IMO,R比Clojure容易学习,尽管由于Clojure基于Lisp并且有大量可用的Lisp资源(例如SICP),所以这并不完全明显。Clojure中的关键字较少,但是这些库的安装和使用更加困难。另外,请记住,R(或S)主要来自Scheme,因此您在使用Lisp时会从中受益。

一般来说:

R的主要优点是CRAN上的社区(超过2461个程序包和计数)。在不久的将来,没有什么可以与之相比,甚至没有像matlab这样的商业应用。

Clojure具有在JVM上运行的巨大优势,这意味着它可以立即使用任何基于Java的库。

我要补充一点,我前段时间进行了有关Clojure / Incanter与R演讲,所以您可能会发现它很有趣。根据我创建此代码的经验,对于简单操作,Clojure通常比R慢。


11

在过去6-7年中,我一直是R的重度用户。作为一种语言,它具有一些设计限制。但是,对于计量经济学和数据分析方面的工作,我仍然全力推荐。它具有大量与计量经济学,时间序列,消费者选择建模等相关的软件包,当然还有出色的可视化,良好的代数和数值库等。我不必担心数据大小的限制。尽管R不是为“大数据”设计的(不同于SAS),但仍有很多方法可以解决。软件包的可用性确实使与众不同。

我只读过Clojure的语言规范,它既漂亮又干净。它自然地解决了并行化和规模化问题。并且,如果您具有一些基本的Java或OOP知识,则可以从大量的高质量Java库中受益。

我与Clojure的问题在于,这是最近的单人(R.Hickey)手术,因此1)非常冒险2)非常不成熟3)利基采用。非常适合发烧友,早期采用者,想尝试新事物的CS / ML人员。对于那些将语言视为通向目标的手段并且需要非常健壮的代码(可以与他人共享代码)的用户来说,建立语言似乎是一个更安全的选择。只知道你是谁。


+1好答案。不久前,我也进行了类似的辩论,因为我对Incanter感兴趣(并做了一些Java编码)。显然,R是用来快速完成统计工作的语言,而Clojure是用来像计算机科学家那样思考的语言。显然存在重叠,但是正如您所说的“知道您是谁”。
Josh Hemann

SAS太旧了,以至于它最初是在打孔卡上运行的,因此它的语法笨拙而古老。它的某些“大数据设计”简直是愚蠢的运气,它最初被设计为在“大型机”上运行,该大型机的内存少于您的手机,并且使用打孔卡来输入数据。我不会说它是为大数据“设计”的,即使它碰巧可以很好地处理它。
韦恩2014年

我在2011年首次听说Clojure时曾有过类似的担忧。我现在不在2014年。Clojure及其社区已经相当成熟,并且非常受欢迎(毕竟,这是一个非OO功能的Lisp)。但是,我不相信Incanter的软件包数量会赶上R(通常,如果您能想到的话,它已经完成了)。有一个基于JRI Java-R接口的Clojure库Rincanter,但我不确定这使用起来有多容易。
火星

5

更新(2014年8月):作为下面的@gappy注释,从R版本3.0.0开始,限制更高,这意味着R能够处理更大的数据集。

这是一个数据点:R具有“大数据上限”,对于了解您是否打算使用大型数据集很有用。

我不确定Clojure / Incanter是否适用相同的限制,是否胜过R或更差。我认为JVM可能可以处理大型数据集,尤其是如果您设法利用Clojure的惰性功能的强大功能。


1
R也是惰性的。

3
@mbq:您的评论令人不悦。R懒惰地评估函数定义中的变量,但“懒惰”不是正常行为。存在函数delayAssign()告诉解释器对变量的赋值是懒惰的,但是一旦任何数据结构指向该变量(无论是否需要对其进行评估),解释器都会进行评估。此外,商业R公司Revolution Analytics必须创建一个迭代器对象来支持其在“大数据”分析中使用R的营销。
2011年

我认为这个答案应该更新。从R 3.0.0开始,R 不再具有2 ^ 31-1个元素的限制。在数组的每个维度上的限制不是2 ^ 63-1(我相信)和2 ^ 31-1 。这使其适用于内存中的大对象。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.