Clojure vs. R: zalety i wady analizy danych

39

Miałem plan nauki R w najbliższej przyszłości. Czytając kolejne pytanie , dowiedziałem się o Clojure. Teraz nie wiem co robić.

Myślę, że dużą zaletą R dla mnie jest to, że niektórzy ludzie w ekonomii go używają, w tym jeden z moich przełożonych (chociaż drugi powiedział: trzymaj się z dala od R!). Jedną z zalet Clojure jest to, że jest oparty na Lisp, a ponieważ zacząłem uczyć się Emacsa i chętnie piszę własne dostosowania, byłoby to pomocne (tak, wiem, że Clojure i Elisp są różnymi dialektami Lisp, ale są wyobrażam sobie zarówno Lisp, jak i tym podobne).

Nie mogę zapytać, który z nich jest lepszy, ponieważ wiem, że jest to bardzo osobiste, ale czy ktoś mógłby dać mi zalety (lub zalety) Clojure x R, szczególnie pod względem praktycznym? Na przykład, który z nich powinien być łatwiejszy do nauczenia się, który jest bardziej elastyczny lub bardziej wydajny, który ma więcej bibliotek, więcej wsparcia, więcej użytkowników itp.?

Moje zamierzone zastosowanie : większość moich szacunków powinna być wykonana przy użyciu Matlaba, więc nie szukam niczego zbyt głębokiego pod względem analizy statystycznej, ale raczej oprogramowania, które zastąpiłoby Excela w zakresie wstępnej manipulacji i wizualizacji danych, statystyk podsumowujących i wykresów, ale także podstawowa analiza statystyczna lub wstępne próby mojego oszacowania.

Vivi
źródło
10
Jeśli spróbujesz R, jest wysoce prawdopodobne, że zrezygnujesz z MATLAB (jak w moim przypadku).
IMO, powinna to być wiki społeczności (pytania typu „kontra” są dość subiektywne).
Shane,
Jest to zdecydowanie pytanie dotyczące języków programowania i należy je zadać w przypadku przepełnienia stosu.
Sharpie
Zgadzam się z Sharpie. @Vivi: powinieneś zmienić tytuł pytania na „zalety i wady mungingu danych” lub coś w tym stylu, aby był bardziej tematyczny.
Shane
5
@Sharpie, @Shane IMO w tym zakresie jest to pytanie o narzędzia, więc jest do przyjęcia.

Odpowiedzi:

27

Zacznę od stwierdzenia, że ​​uwielbiam oba języki: nie można się pomylić z żadnym z nich, a na pewno są one lepsze niż C ++ lub Java do analizy danych.

Dla podstawowej analizy danych sugerowałbym R (szczególnie z plyr). IMO, R jest trochę łatwiejszy do nauczenia niż Clojure, chociaż nie jest to całkowicie oczywiste, ponieważ Clojure opiera się na Lisp i dostępnych jest wiele fantastycznych zasobów Lisp (takich jak SICP ). W Clojure jest mniej słów kluczowych, ale biblioteki są znacznie trudniejsze do zainstalowania i pracy z nimi. Pamiętaj również, że R (lub S) w dużej mierze pochodzi ze Schematu, więc skorzystaj z wiedzy Lisp podczas jej używania.

Ogólnie:

Główną zaletą R jest społeczność na CRAN (ponad 2461 pakietów i wciąż rośnie). W niedalekiej przyszłości nic się z tym nie porówna, nawet komercyjna aplikacja taka jak Matlab.

Clojure ma tę wielką zaletę, że działa na JVM, co oznacza, że ​​może natychmiast korzystać z dowolnej biblioteki opartej na Javie.

Dodałbym, że jakiś czas temu rozmawiałem z R Clojure / Incanter , więc może zainteresuje Cię to. Z mojego doświadczenia związanego z tworzeniem tego, Clojure był ogólnie wolniejszy niż R dla prostych operacji.

Shane
źródło
11

Byłem intensywnym użytkownikiem R przez ostatnie 6-7 lat. Jako język ma kilka ograniczeń projektowych. Jednak do pracy w ekonometrii i analizie danych nadal z całego serca ją polecam. Ma dużą liczbę pakietów, które byłyby dla ciebie odpowiednie dla ekonometrii, szeregów czasowych, modelowania wyboru konsumenta itp. I oczywiście doskonała wizualizacja, dobra algebra i biblioteki numeryczne itp. Nie martwiłbym się zbytnio ograniczeniami wielkości danych. Chociaż R nie został zaprojektowany dla „dużych zbiorów danych” (w przeciwieństwie, powiedzmy, SAS), istnieją na to sposoby. Dostępność pakietów jest tym, co naprawdę robi różnicę.

Przeczytałem tylko specyfikacje językowe Clojure i jest to piękne i czyste. W naturalny sposób rozwiązuje problemy paralelizacji i skali. A jeśli masz podstawową wiedzę na temat java lub OOP, możesz skorzystać z dużej liczby wysokiej jakości bibliotek java.

Problem z Clojure dotyczy tego, że jest to niedawna jednoosobowa operacja (R.Hickey), dlatego 1) bardzo ryzykowna 2) bardzo niedojrzała 3) z przyjęciem niszowym. Idealne dla entuzjastów, początkujących użytkowników, osób CS / ML, które chcą wypróbować nowe rzeczy. Dla użytkownika, który postrzega język jako środek do celu i potrzebuje bardzo solidnego kodu, który można udostępniać innym osobom, ustalone języki wydają się bezpieczniejszym wyborem. Po prostu wiedz kim jesteś.

niezadowolony
źródło
+1 Świetna odpowiedź. Jakiś czas temu miałem podobną debatę, ponieważ zaintrygował mnie Incanter (i napisałem trochę kodu Java). Było jasne, że R jest językiem używanym do szybkiego wykonywania pracy statystycznej, podczas gdy Clojure jest językiem używanym do myślenia bardziej jak informatyk. Oczywiście nakładają się, ale jak mówisz „wiedz kim jesteś”.
Josh Hemann
SAS jest tak stary, że początkowo działał na kartach perforowanych, stąd jego niezręczna i archaiczna składnia. Pewna część „big data design” to po prostu głupie szczęście, że pierwotnie został zaprojektowany do pracy na „komputerach mainframe”, które miały mniej pamięci niż twój telefon i korzystały z kart perforowanych do wprowadzania danych. Nie powiedziałbym, że jest „zaprojektowany” dla Big Data, chociaż zdarza się, że dobrze sobie z tym radzi.
Wayne
Miałem podobne obawy dotyczące Clojure w 2011 roku, kiedy po raz pierwszy o tym usłyszałem. Ja nie teraz, w 2014 roku. Clojure i jego społeczność są dość dojrzali i jest zaskakująco popularny (w końcu jest to non-OO, funkcjonalny, Lisp). Jednak nie wierzę, że Incanter kiedykolwiek dogoni R w liczbie pakietów (zwykle, jeśli możesz o tym pomyśleć, to już zostało zrobione). Istnieje biblioteka Rincanter firmy Clojure oparta na interfejsie JRI Java-R, ale nie jestem pewien, jak łatwo jest z niej korzystać.
Mars
5

Aktualizacja (sierpień 2014): ponieważ @gappy komentarze poniżej, od wersji R 3.0.0 limity są wyższe i oznacza, że ​​R jest w stanie obsługiwać większe zestawy danych.

Oto punkt danych: R ma „pułap dużych zbiorów danych” , przydatny, jeśli planujesz pracę z dużymi zestawami danych.

Nie jestem pewien, czy te same ograniczenia dotyczą Clojure / Incanter, czy przewyższa on R, czy też jest gorzej. Wyobrażam sobie, że JVM prawdopodobnie poradzi sobie z dużymi zestawami danych, zwłaszcza jeśli uda ci się wykorzystać moc leniwych funkcji Clojure.

Mike Mazur
źródło
1
R jest również leniwy.
3
@mbq: Twój komentarz wprowadza w błąd. R leniwie ocenia zmienne w definicji funkcji, ale „lenistwo” nie jest normalnym zachowaniem. Funkcja opóźnionaAssign () istnieje, aby powiedzieć interpreterowi, że jest leniwy z przypisaniem zmiennej, ale interpreter dokona oceny, gdy jakakolwiek struktura danych wskaże tę zmienną, niezależnie od tego, czy należy ją ocenić, czy nie. Ponadto komercyjna firma R Revolution Analytics musiała stworzyć obiekt iteracyjny, aby wesprzeć ich marketing za używanie R w analizie „big data”.
Josh Hemann
Myślę, że ta odpowiedź powinna zostać zaktualizowana. Od wersji R 3.0.0 R nie ma już limitu 2 ^ 31-1 elementu. Limit nie wynosi 2 ^ 63-1 (jak sądzę) i 2 ^ 31-1 w każdym wymiarze tablicy. Dzięki temu nadaje się do dużych obiektów w pamięci.
szczęśliwy