Clojure порівняно з R: переваги та недоліки для аналізу даних


39

У мене був план вивчення R найближчим часом. Читаючи ще одне запитання, я дізнався про Clojure. Тепер я не знаю, що робити.

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

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

Моє призначення : Більшість моїх оцінок слід проводити за допомогою Matlab, тому я не шукаю нічого занадто глибокого з точки зору статистичного аналізу, а швидше програмного забезпечення для заміни Excel для початкової маніпуляції та візуалізації даних, зведеної статистики та графіків, але також базовий статистичний аналіз або початкові спроби моєї оцінки.


10
Якщо ви скуштуєте R, ви дуже впевнені, що ви підете з MATLAB (як у моєму випадку).

IMO, це має бути вікі спільноти (питання типу "проти" є досить суб'єктивними).
Шейн

Це, безумовно, питання, що стосується мов програмування, і його слід задавати на Stack Overflow.
Шарпі

Я згоден з Шарпі. @Vivi: вам слід змінити назву питання на "переваги та недоліки для пошуку даних" або щось у цьому напрямку, щоб воно було більше тематичним.
Шейн

5
@Sharpie, @Shane IMO в цій мірі питання про інструменти, тому це прийнятно.

Відповіді:


27

Почніть з того, що я люблю обидві мови: ви не можете помилитися ні з однією, і вони, звичайно, кращі, ніж щось на зразок C ++ або Java для аналізу даних.

Для базового аналізу даних я б запропонував R (особливо з plyr). IMO, R трохи легше вивчити, ніж Clojure, хоча це не зовсім очевидно, оскільки Clojure базується на Lisp і є чимало фантастичних ресурсів Lisp (наприклад, SICP ). У Clojure менше ключових слів, але бібліотеки набагато складніше встановити та працювати з ними. Крім того, майте на увазі, що R (або S) в значній мірі походить від схеми, тому ви отримаєте користь від знань Lisp при його використанні.

Загалом:

Основна перевага R - це спільнота на CRAN (понад 2461 пакетів і кількість). Нічого з цим не зрівняється в найближчому майбутньому, навіть комерційний додаток, як матлаб.

Clojure має велику перевагу роботи на JVM, що означає, що він може використовувати будь-яку бібліотеку на базі Java негайно.

Я додам, що я давно говорив про Clojure / Incanter для R , тому ви можете зацікавити. З мого досвіду створення цього, Clojure, як правило, повільніше, ніж R, для простих операцій.


11

Я був важким користувачем R протягом останніх 6-7 років. Як мова, вона має кілька обмежень дизайну. Тим не менше, для роботи в економетриці та в аналізі даних я все-таки щиро рекомендую це. У ньому є велика кількість пакетів, які були б важливі для вас в економетриці, часових рядах, моделюванні вибору споживачів тощо. Хоча R не був розроблений для "великих даних" (на відміну, скажімо, SAS), існують способи їх вирішення. Насправді зміна наявності пакетів - це важлива ситуація.

Я читав лише мовні характеристики Clojure, і це красиво і чисто. Він природним чином вирішує питання паралелізації та масштабу. І якщо у вас є основні знання з Java або OOP, ви можете скористатися великою кількістю високоякісних бібліотек Java.

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


+1 Відмінна відповідь. У мене були подібні дискусії деякий час назад, тому що мене заінтригував Incanter (і я зробив деякі кодування Java). Було зрозуміло, що R - це мова, якою можна скоріше виконати статистичну роботу, в той час як Clojure - це мова, якою можна думати більше, як комп'ютер. Очевидно, є перекриття, але, як ви говорите, "знайте, хто ви є".
Джош Хеман

SAS настільки стара, що спочатку вона працювала на перфокартах, звідси її незграбний та архаїчний синтаксис. Деякий обсяг його «великого дизайну даних» є просто тупою удачею, що він спочатку був розроблений для роботи на «мейнфреймах», які мали менше пам’яті, ніж ваш телефон, і які використовували перфокарти для введення даних. Я б не сказав, що він "розроблений" для Big Data, навіть незважаючи на те, що це добре справляється.
Уейн

У мене були подібні побоювання щодо Clojure в 2011 році, коли я вперше почув про це. Я не зараз, у 2014 році. Clojure та його спільнота досить зрілі, і це напрочуд популярно (зрештою, це не-OO, функціонал, 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 для кожного виміру масиву. Це робить його підходящим для великих об'єктів у пам'яті.
гаппі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.