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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.