Clojure versus R: Vor- und Nachteile für die Datenanalyse

39

Ich hatte einen Plan, R in naher Zukunft zu lernen. Als ich eine andere Frage las, erfuhr ich von Clojure. Jetzt weiß ich nicht was ich tun soll.

Ich denke, ein großer Vorteil von R ist für mich, dass einige Leute in der Volkswirtschaftslehre es verwenden, einschließlich eines meiner Vorgesetzten (obwohl der andere sagte: Bleib weg von R!). Ein Vorteil von Clojure ist, dass es auf Lisp basiert, und da ich Emacs gelernt habe und daran interessiert bin, meine eigenen Anpassungen zu schreiben, wäre es hilfreich (ja, ich weiß, dass Clojure und Elisp verschiedene Dialekte von Lisp sind, aber sie sind es sowohl Lisp als auch so ähnlich würde ich mir vorstellen).

Ich kann nicht fragen, welches besser ist, weil ich weiß, dass dies sehr persönlich ist, aber könnte mir jemand die Vorteile (oder Vorteile) von Clojure x R geben, insbesondere in praktischer Hinsicht? Welcher sollte zum Beispiel leichter zu erlernen sein, welcher ist flexibler oder leistungsfähiger, welcher hat mehr Bibliotheken, mehr Unterstützung, mehr Benutzer usw.?

Mein Verwendungszweck : Der Großteil meiner Schätzung sollte mit Matlab erfolgen, daher suche ich nicht nach einer zu umfassenden statistischen Analyse, sondern nach einer Software, die Excel anstelle der anfänglichen Datenmanipulation und -visualisierung, der zusammenfassenden Statistik und der grafischen Darstellung verwendet. aber auch einige grundlegende statistische Analysen oder die ersten Versuche meiner Einschätzung.

Vivi
quelle
10
Wenn Sie R probieren würden, ist es sehr wahrscheinlich, dass Sie (wie in meinem Fall) von MATLAB zurücktreten werden.
IMO, dies sollte ein Community-Wiki sein (Fragen vom Typ "Versus" sind ziemlich subjektiv).
Shane
Dies ist definitiv eine Frage zu Programmiersprachen und sollte bei Stack Overflow gestellt werden.
Sharpie
Ich stimme Sharpie zu. @Vivi: Sie sollten den Fragentitel so ändern, dass er "Vor- und Nachteile für das Munging von Daten" ist, oder so ähnlich, damit er themenbezogener ist.
Shane
5
@Sharpie, @Shane IMO Insofern handelt es sich um Tools, also ist es akzeptabel.

Antworten:

27

Lassen Sie mich zunächst sagen, dass ich beide Sprachen liebe: Sie können auch nichts falsch machen, und sie sind mit Sicherheit besser als C ++ oder Java für die Datenanalyse.

Für die grundlegende Datenanalyse würde ich R vorschlagen (besonders mit Plyr). IMO, R ist ein bisschen einfacher zu erlernen als Clojure, obwohl dies nicht ganz offensichtlich ist, da Clojure auf Lisp basiert und zahlreiche fantastische Lisp-Ressourcen zur Verfügung stehen (wie z. B. SICP ). Es gibt weniger Schlüsselwörter in Clojure, aber die Bibliotheken sind viel schwieriger zu installieren und zu bearbeiten. Denken Sie auch daran, dass R (oder S) größtenteils von Schema abgeleitet ist, sodass Sie bei der Verwendung von Lisp-Wissen profitieren würden.

Im Allgemeinen:

Der Hauptvorteil von R ist die Community auf CRAN (über 2461 Pakete und Zählung). In naher Zukunft wird es nichts Vergleichbares geben, nicht einmal eine kommerzielle Anwendung wie matlab.

Clojure hat den großen Vorteil, dass es auf der JVM ausgeführt wird, was bedeutet, dass es jede Java-basierte Bibliothek sofort verwenden kann.

Ich möchte hinzufügen, dass ich vor einiger Zeit einen Vortrag über Clojure / Incanter in Bezug auf R gehalten habe, damit Sie ihn vielleicht interessant finden. Nach meiner Erfahrung war Clojure bei einfachen Operationen im Allgemeinen langsamer als R.

Shane
quelle
11

Ich bin seit 6-7 Jahren ein starker R-User. Als Sprache weist es mehrere Designeinschränkungen auf. Für die Arbeit in der Ökonometrie und in der Datenanalyse kann ich es dennoch von ganzem Herzen empfehlen. Es hat eine große Anzahl von Paketen, die für Sie relevant sind für Ökonometrie, Zeitreihen, Consumer Choice-Modellierung usw. und natürlich exzellente Visualisierung, gute Algebra und numerische Bibliotheken usw. Ich würde mich nicht zu sehr um Datengrößenbeschränkungen kümmern. Obwohl R nicht für "Big Data" konzipiert wurde (im Gegensatz zu beispielsweise SAS), gibt es Möglichkeiten, dies zu umgehen. Die Verfügbarkeit von Paketen macht den Unterschied aus.

Ich habe nur die Sprachspezifikationen von Clojure gelesen und sie sind wunderschön und sauber. Es befasst sich auf natürliche Weise mit Fragen der Parallelisierung und Skalierung. Und wenn Sie über grundlegende Java- oder OOP-Kenntnisse verfügen, können Sie von der großen Anzahl hochwertiger Java-Bibliotheken profitieren.

Das Problem bei Clojure ist, dass es sich um eine kürzlich durchgeführte Ein-Mann-Operation (R.Hickey) handelt, also 1) sehr riskant 2) sehr unreif 3) mit Nischenadoption. Ideal für Enthusiasten, Early Adopters und CS / ML-Leute, die neue Dinge ausprobieren möchten. Für einen Benutzer, der eine Sprache als Mittel zum Zweck sieht und einen sehr robusten Code benötigt, der mit anderen geteilt werden kann, scheinen etablierte Sprachen eine sicherere Wahl zu sein. Weiß nur wer du bist.

gappy
quelle
+1 Gute Antwort. Ich hatte vor einiger Zeit eine ähnliche Debatte, weil ich von Incanter fasziniert war (und einige Java-Codierungen vorgenommen habe). Es war klar, dass R die Sprache war, mit der statistische Arbeiten schnell erledigt werden konnten, während Clojure die Sprache war, mit der man eher wie ein Informatiker dachte. Offensichtlich gibt es Überlappungen, aber wie Sie sagen "wissen, wer Sie sind".
Josh Hemann
SAS ist so alt, dass es ursprünglich auf Lochkarten lief, daher seine umständliche und archaische Syntax. Ein Teil des "Big-Data-Designs" ist einfach ein Pech, dass es ursprünglich für "Mainframes" entwickelt wurde, die weniger Speicher als Ihr Telefon hatten und für die Dateneingabe Lochkarten verwendeten. Ich würde nicht sagen, dass es für Big Data "konzipiert" ist, obwohl es zufällig gut damit umgeht.
Wayne
Ich hatte ähnliche Bedenken in Bezug auf Clojure im Jahr 2011, als ich zum ersten Mal davon hörte. Ich nicht jetzt, im Jahr 2014. Clojure und seine Community sind ziemlich ausgereift und es ist überraschend beliebt (immerhin ist es ein Non-OO, funktional, Lisp). Ich glaube jedoch nicht, dass Incanter jemals R in Bezug auf die Anzahl der Pakete einholen wird (normalerweise ist dies, wenn Sie sich das vorstellen können, bereits geschehen). Es gibt eine Clojure-Bibliothek Rincanter, die auf der JRI Java-R-Schnittstelle basiert, aber ich bin mir nicht sicher, wie einfach dies zu verwenden ist.
Mars
5

Update (August 2014): Ab R-Version 3.0.0 sind die Grenzwerte höher, da @gappy-Kommentare unten angezeigt werden. Dies bedeutet, dass R größere Datensätze verarbeiten kann.

Hier ist ein Datenpunkt: R hat eine "Obergrenze für große Datenmengen" . Dies ist hilfreich, wenn Sie vorhaben, mit großen Datenmengen zu arbeiten.

Ich bin mir nicht sicher, ob die gleichen Einschränkungen für Clojure / Incanter gelten, ob es R übertrifft oder tatsächlich schlechter ist. Ich stelle mir vor, dass die JVM wahrscheinlich mit großen Datenmengen umgehen kann, insbesondere wenn Sie die Leistungsfähigkeit der faulen Funktionen von Clojure nutzen.

Mike Mazur
quelle
1
R wird auch faul bewertet.
3
@mbq: Dein Kommentar ist irreführend. R wertet Variablen in einer Funktionsdefinition träge aus, aber "Faulheit" ist kein normales Verhalten. Die Funktion delayedAssign () teilt dem Interpreter mit, dass er mit der Zuweisung einer Variablen faul ist. Der Interpreter führt jedoch die Auswertung durch, sobald eine Datenstruktur auf diese Variable verweist, unabhängig davon, ob sie ausgewertet werden muss oder nicht. Darüber hinaus musste das kommerzielle R-Unternehmen Revolution Analytics ein Iterator-Objekt erstellen, um das Marketing für die Verwendung von R in der Big-Data-Analyse zu unterstützen.
Josh Hemann
Ich denke, diese Antwort sollte aktualisiert werden. Seit R 3.0.0 ist R nicht mehr auf 2 ^ 31-1 beschränkt. Die Grenze ist nicht 2 ^ 63-1 (glaube ich) und 2 ^ 31-1 für jede Dimension eines Arrays. Dies macht es für große Objekte im Speicher geeignet.
gappy