Clojure contro R: vantaggi e svantaggi per l'analisi dei dati


39

Avevo un piano per imparare la R nel prossimo futuro. Leggendo un'altra domanda che ho scoperto su Clojure. Ora non so cosa fare.

Penso che un grande vantaggio di R per me sia che alcune persone in Economia lo usano, incluso uno dei miei supervisori (anche se l'altro ha detto: stai lontano da R!). Uno dei vantaggi di Clojure è che è basato su Lisp, e dato che ho iniziato a studiare Emacs e sono appassionato di scrivere le mie personalizzazioni, sarebbe utile (sì, so che Clojure ed Elisp sono dialetti diversi di Lisp, ma lo sono sia Lisp che simili immagino).

Non posso chiedere quale sia migliore, perché so che è molto personale, ma qualcuno potrebbe darmi i vantaggi (o i vantaggi) di Clojure x R, soprattutto in termini pratici? Ad esempio, quale dovrebbe essere più facile da imparare, quale è più flessibile o più potente, quale ha più librerie, più supporto, più utenti, ecc.?

Uso previsto : la maggior parte delle mie stime dovrebbe essere eseguita utilizzando Matlab, quindi non sto cercando nulla di troppo approfondito in termini di analisi statistica, ma piuttosto un software per sostituire Excel con la manipolazione e la visualizzazione dei dati iniziali, statistiche riassuntive e grafici, ma anche alcune analisi statistiche di base o i tentativi iniziali alla mia stima.


10
Se vuoi assaggiare R, è molto probabile che ti dimetterai da MATLAB (come nel mio caso).

IMO, questo dovrebbe essere wiki della comunità (le domande di lingua "contro" sono piuttosto soggettive).
Shane,

Questa è sicuramente una domanda riguardante i linguaggi di programmazione e dovrebbe essere posta su Stack Overflow.
Sharpie,

Sono d'accordo con Sharpie. @Vivi: dovresti cambiare il titolo della domanda in "vantaggi e svantaggi per il munging dei dati" o qualcosa del genere in modo che sia più in tema.
Shane,

5
@Sharpie, @Shane IMO fino a questo punto è una domanda sugli strumenti, quindi è accettabile.

Risposte:


27

Vorrei iniziare dicendo che adoro entrambe le lingue: non si può sbagliare con nessuna delle due, e sono sicuramente meglio di qualcosa come C ++ o Java per fare analisi dei dati.

Per l'analisi dei dati di base suggerirei R (specialmente con plyr). IMO, R è un po 'più facile da imparare rispetto a Clojure, anche se questo non è del tutto ovvio poiché Clojure si basa su Lisp e ci sono numerose fantastiche risorse di Lisp disponibili (come SICP ). Ci sono meno parole chiave in Clojure, ma le librerie sono molto più difficili da installare e lavorare. Inoltre, tieni presente che R (o S) deriva in gran parte dallo Schema, quindi trarrai beneficio dalla conoscenza di Lisp quando lo usi.

In generale:

Il vantaggio principale di R è la community su CRAN (oltre 2461 pacchetti e conteggio). Nulla potrà essere paragonato a questo nel prossimo futuro, nemmeno un'applicazione commerciale come Matlab.

Clojure ha il grande vantaggio di essere eseguito su JVM, il che significa che può usare immediatamente qualsiasi libreria basata su Java.

Vorrei aggiungere che ho pronunciato un discorso relativo a Clojure / Incanter con R qualche tempo fa, quindi potresti trovarlo interessante. Nella mia esperienza sulla creazione di questo, Clojure era generalmente più lento di R per operazioni semplici.


11

Sono stato un utente R pesante negli ultimi 6-7 anni. Come lingua, ha diversi limiti di progettazione. Tuttavia, per il lavoro di econometria e di analisi dei dati, lo consiglio ancora con tutto il cuore. Ha un gran numero di pacchetti che sarebbero rilevanti per te per econometria, serie temporali, modelli di scelta dei consumatori ecc. E, naturalmente, visualizzazione eccellente, buona algebra e librerie numeriche ecc. Non mi preoccuperei troppo delle limitazioni della dimensione dei dati. Sebbene R non sia stato progettato per "big data" (a differenza, diciamo, SAS) ci sono dei modi per aggirarlo. La disponibilità dei pacchetti è ciò che fa davvero la differenza.

Ho letto solo le specifiche del linguaggio di Clojure, ed è bello e pulito. Affronta in modo naturale le problematiche della parallelizzazione e della scala. E se hai una conoscenza base di Java o OOP, puoi beneficiare del gran numero di librerie Java di alta qualità.

Il problema che ho con Clojure è che è una recente operazione individuale (R.Hickey), quindi 1) molto rischiosa 2) molto immatura 3) con adozione di nicchia. Ottimo per gli appassionati, i primi utenti, le persone CS / ML che vogliono provare cose nuove. Per un utente che vede una lingua come mezzo per raggiungere un fine e che ha bisogno di un codice molto robusto che può essere condiviso con altri, le lingue stabilite sembrano una scelta più sicura. Basta sapere chi sei.


+1 Ottima risposta. Ho avuto un dibattito simile qualche tempo fa perché ero incuriosito da Incanter (e ho fatto un po 'di programmazione Java). Era chiaro che R era la lingua da usare per fare rapidamente lavoro statistico mentre Clojure era la lingua da usare per pensare più come uno scienziato informatico. Ovviamente c'è sovrapposizione ma come dici "sai chi sei".
Josh Hemann,

SAS è così vecchio che originariamente funzionava su schede perforate, quindi la sua sintassi scomoda e arcaica. Una parte del suo "design dei big data" è semplicemente una stupida fortuna per il fatto che originariamente era progettato per funzionare su "mainframe" che avevano meno memoria del telefono e che utilizzavano schede perforate per inserire i dati. Non direi che è "progettato" per i Big Data, anche se capita di gestirlo bene.
Wayne,

Avevo preoccupazioni simili su Clojure nel 2011 quando ne ho sentito parlare per la prima volta. Non lo faccio ora, nel 2014. Clojure e la sua comunità sono abbastanza maturi, ed è sorprendentemente popolare (dopo tutto, è un non-OO, funzionale, Lisp). Tuttavia, non credo che Incanter raggiungerà mai R in numero di pacchetti (di solito, se riesci a pensarci, è già stato fatto). C'è una libreria Clojure Rincanter basata sull'interfaccia JRI Java-R, ma non sono sicuro di quanto sia facile da usare.
Marte

5

Aggiornamento (agosto 2014): come commenta @gappy di seguito, dalla versione 3.0.0 di R i limiti sono più alti e significa che R è in grado di gestire set di dati più grandi.

Ecco un punto dati: R ha un "limite massimo di dati" , utile per sapere se hai intenzione di lavorare con enormi set di dati.

Non sono sicuro se le stesse limitazioni si applichino a Clojure / Incanter, se supera R o se è effettivamente peggiore. Immagino che JVM possa probabilmente gestire grandi set di dati, specialmente se riesci a sfruttare la potenza delle funzionalità pigre di Clojure.


1
R è anche valutato pigro.

3
@mbq: il tuo commento è fuorviante. Valuta pigramente le variabili in una definizione di funzione ma "pigrizia" non è un comportamento normale. La funzione delayedAssign () esiste per dire all'interprete di essere pigro con l'assegnazione di una variabile, ma l'interprete effettuerà la valutazione quando una struttura di dati punta a quella variabile, indipendentemente dal fatto che debba essere valutata o meno. Inoltre, la società commerciale R Revolution Analytics ha dovuto creare un oggetto iteratore per supportare il proprio marketing per l'utilizzo di R nell'analisi dei "big data".
Josh Hemann,

Penso che questa risposta debba essere aggiornata. Da R 3.0.0, R non ha più un limite di 2 ^ 31-1 elemento. Il limite non è 2 ^ 63-1 (credo) e 2 ^ 31-1 su ogni dimensione di un array. Questo lo rende adatto per oggetti di grandi dimensioni in memoria.
gappy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.