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.


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.


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ś.


+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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.