Clojure против R: преимущества и недостатки для анализа данных

39

У меня был план изучения Р в ближайшее время. Читая другой вопрос, я узнал о Clojure. Теперь я не знаю, что делать.

Я думаю, что большим преимуществом R для меня является то, что некоторые люди в экономике используют его, в том числе один из моих руководителей (хотя другой сказал: держись подальше от R!). Одним из преимуществ Clojure является то, что он основан на Лиспе, и, поскольку я начал изучать Emacs, и мне очень нравится писать собственные настройки, это было бы полезно (да, я знаю, что Clojure и Elisp - это разные диалекты Лисп, но они и Лисп и тем самым похожий я себе представляю).

Я не могу спросить, какой из них лучше, потому что я знаю, что это очень личное, но может ли кто-нибудь дать мне преимущества (или преимущества) Clojure x R, особенно в практическом плане? Например, какой из них должно быть легче выучить, какой из них более гибкий или более мощный, у кого больше библиотек, больше поддержки, больше пользователей и т. Д.?

Мое предполагаемое использование : основная часть моей оценки должна быть сделана с использованием Matlab, поэтому я не ищу ничего слишком глубокого с точки зрения статистического анализа, а скорее программного обеспечения для замены Excel для первоначальной обработки данных и визуализации, сводной статистики и построения диаграмм, но также некоторый базовый статистический анализ или первоначальные попытки моей оценки.

Виви
источник
10
Если вы попробуете R, весьма вероятно, что вы выйдете из MATLAB (как в моем случае).
ИМО, это должна быть вики сообщества (вопросы типа «язык против» довольно субъективны).
Шейн
Это определенно вопрос, касающийся языков программирования, и его следует задавать в Stack Overflow.
Шарпи
Я согласен с Шарпи. @Vivi: вы должны изменить название вопроса на «преимущества и недостатки для сбора данных» или что-то в этом роде, чтобы оно было более актуальным.
Шейн
5
@Sharpie, @Shane IMO, в этом смысле речь идет об инструментах, поэтому это приемлемо.

Ответы:

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

Я был тяжелым пользователем R в течение последних 6-7 лет. Как язык, он имеет несколько ограничений дизайна. Тем не менее, для работы в эконометрике и анализе данных, я все еще искренне рекомендую это. Он имеет большое количество пакетов, которые могут быть полезны вам для эконометрики, временных рядов, моделирования потребительского выбора и т. Д. И, конечно, отличной визуализации, хорошей алгебры и числовых библиотек и т. Д. Я бы не слишком беспокоился об ограничениях размера данных. Хотя R не был разработан для «больших данных» (в отличие, скажем, от SAS), есть способы обойти это. Доступность пакетов - это то, что действительно имеет значение.

Я только прочитал языковые спецификации Clojure, и это красиво и чисто. Он естественным образом решает вопросы распараллеливания и масштабирования. И если у вас есть базовые знания Java или ООП, вы можете воспользоваться большим количеством высококачественных библиотек Java.

Проблема, которую я имею с Clojure, заключается в том, что это недавняя операция с одним человеком (R.Hickey), поэтому 1) очень рискованная 2) очень незрелая 3) с принятием ниши. Отлично подходит для энтузиастов, начинающих, CS / ML людей, которые хотят попробовать что-то новое. Для пользователя, который рассматривает язык как средство достижения цели и которому нужен очень надежный код, который можно использовать совместно с другими, признанные языки кажутся более безопасным выбором. Просто знай, кто ты.

с промежутками
источник
+1 Отличный ответ. Некоторое время назад у меня были подобные дебаты, потому что я был заинтригован Incanter (и сделал некоторое кодирование Java). Было ясно, что R - это язык, который используется для быстрого выполнения статистической работы, в то время как Clojure - это язык, на котором можно больше думать, как ученый. Очевидно, что есть совпадение, но, как вы говорите, «знай, кто ты».
Джош Хеманн
SAS настолько стар, что изначально работал на перфокартах, отсюда и его неловкий и архаичный синтаксис. Некоторое количество его «дизайна больших данных» - просто глупая удача, что он изначально был разработан для работы на «мэйнфреймах», которые имели меньше памяти, чем ваш телефон, и которые использовали перфокарты для ввода данных. Я бы не сказал, что он «разработан» для больших данных, даже если он хорошо с этим справляется.
Уэйн
У меня были подобные опасения по поводу Clojure в 2011 году, когда я впервые услышал об этом. Не знаю, в 2014 году. Clojure и его сообщество достаточно развиты, и они удивительно популярны (в конце концов, это не функциональный объект, функционал, Lisp). Однако я не верю, что Incanter когда-либо догонит R по количеству пакетов (обычно, если вы можете подумать об этом, это уже сделано). Есть библиотека Clojure Rincanter, основанная на интерфейсе JRI Java-R, но я не уверен, насколько легко это использовать.
Марс
5

Обновление (август 2014 г.): как @gappy комментирует ниже, начиная с версии R 3.0.0 ограничения выше и означают, что R способен обрабатывать большие наборы данных.

Вот точка данных: R имеет «потолок больших данных» , полезно знать, планируете ли вы работать с огромными наборами данных.

Я не уверен, применяются ли такие же ограничения к Clojure / Incanter, превосходит ли он R или на самом деле хуже. Я полагаю, что JVM может обрабатывать большие наборы данных, особенно если вам удастся использовать возможности ленивых функций Clojure.

Майк Мазур
источник
1
R также лениво оценивается.
3
@mbq: Ваш комментарий вводит в заблуждение. R лениво оценивает переменные в определении функции, но «лень» не является нормальным поведением. Функция delayedAssign () существует, чтобы сказать интерпретатору лениво присваивать переменную, но интерпретатор выполнит оценку, как только какая-либо структура данных укажет на эту переменную, независимо от того, должна ли она оцениваться или нет. Кроме того, коммерческая R-компания Revolution Analytics должна была создать объект итератора для поддержки своего маркетинга для использования R в анализе «больших данных».
Джош Хеманн
Я думаю, что этот ответ должен быть обновлен. Начиная с R 3.0.0, R больше не имеет ограничения в 2 ^ 31-1 элемента. Предел не 2 ^ 63-1 (я полагаю) и 2 ^ 31-1 для каждого измерения массива. Это делает его подходящим для больших объектов в памяти.
gappy