Clojure versus R: keuntungan dan kerugian untuk analisis data


39

Saya punya rencana belajar R dalam waktu dekat. Membaca pertanyaan lain saya tahu tentang Clojure. Sekarang saya tidak tahu harus berbuat apa.

Saya pikir keuntungan besar R bagi saya adalah bahwa beberapa orang di Ekonomi menggunakannya, termasuk salah satu penyelia saya (meskipun yang lain mengatakan: menjauhlah dari R!). Salah satu keuntungan Clojure adalah berbasis Lisp, dan ketika saya sudah mulai belajar Emacs dan saya tertarik untuk menulis penyesuaian saya sendiri, akan sangat membantu (ya, saya tahu Clojure dan Elisp adalah dialek Lisp yang berbeda, tetapi mereka baik Lisp dan dengan demikian mirip saya bayangkan).

Saya tidak bisa bertanya mana yang lebih baik, karena saya tahu ini sangat pribadi, tetapi bisakah seseorang memberi saya keuntungan (atau kelebihan) dari Clojure x R, terutama dalam hal praktis? Misalnya, mana yang harus lebih mudah dipelajari, mana yang lebih fleksibel atau lebih kuat, mana yang memiliki lebih banyak perpustakaan, lebih banyak dukungan, lebih banyak pengguna, dll?

Penggunaan yang saya maksudkan : Sebagian besar estimasi saya harus dilakukan menggunakan Matlab, jadi saya tidak mencari apa pun yang terlalu mendalam dalam hal analisis statistik, melainkan perangkat lunak untuk menggantikan Excel untuk manipulasi dan visualisasi data awal, ringkasan statistik dan pembuatan bagan, tetapi juga beberapa analisis statistik dasar atau upaya awal estimasi saya.


10
Jika Anda akan merasakan R, sangat mungkin bahwa Anda akan mengundurkan diri dari MATLAB (seperti dalam kasus saya).

IMO, ini harus wiki komunitas (pertanyaan jenis "versus" cukup subyektif).
Shane

Ini jelas merupakan pertanyaan tentang bahasa pemrograman dan harus ditanyakan pada Stack Overflow.
Sharpie

Saya setuju dengan Sharpie. @Vivi: Anda harus mengubah judul pertanyaan menjadi "kelebihan dan kekurangan untuk munging data" atau sesuatu di sepanjang baris itu sehingga lebih sesuai topik.
Shane

5
@Sharpie, @Shane IMO sejauh ini merupakan pertanyaan tentang alat, jadi itu dapat diterima.

Jawaban:


27

Mari saya mulai dengan mengatakan bahwa saya suka kedua bahasa: Anda tidak dapat salah dengan salah satu, dan mereka tentu lebih baik daripada sesuatu seperti C ++ atau Java untuk melakukan analisis data.

Untuk analisis data dasar saya akan menyarankan R (terutama dengan plyr). IMO, R sedikit lebih mudah dipelajari daripada Clojure, meskipun ini tidak sepenuhnya jelas karena Clojure didasarkan pada Lisp dan ada banyak sumber daya Lisp fantastis yang tersedia (seperti SICP ). Ada lebih sedikit kata kunci di Clojure, tetapi perpustakaan jauh lebih sulit untuk diinstal dan bekerja dengan. Juga, perlu diingat bahwa R (atau S) sebagian besar berasal dari Skema, sehingga Anda akan mendapat manfaat dari pengetahuan Lisp saat menggunakannya.

Secara umum:

Keuntungan utama R adalah komunitas menggunakan CRAN (lebih dari 2461 paket dan terus bertambah). Tidak ada yang akan dibandingkan dengan ini dalam waktu dekat, bahkan aplikasi komersial seperti matlab.

Clojure memiliki keuntungan besar dalam menjalankan JVM yang artinya dapat menggunakan pustaka berbasis Java apa pun dengan segera.

Saya ingin menambahkan bahwa saya memberikan ceramah yang berkaitan dengan Clojure / Incanter ke R beberapa waktu lalu, jadi Anda mungkin merasa tertarik. Dalam pengalaman saya tentang membuat ini, Clojure umumnya lebih lambat dari R untuk operasi sederhana.


11

Saya telah menjadi pengguna R yang berat selama 6-7 tahun terakhir. Sebagai bahasa, ia memiliki beberapa batasan desain. Namun, untuk pekerjaan di bidang ekonometrika dan analisis data, saya masih dengan sepenuh hati merekomendasikannya. Ini memiliki sejumlah besar paket yang akan relevan bagi Anda untuk ekonometrik, seri waktu, pemodelan pilihan konsumen, dll. Dan tentu saja visualisasi yang sangat baik, aljabar yang baik dan perpustakaan numerik dll. Saya tidak akan terlalu khawatir tentang batasan ukuran data. Meskipun R tidak dirancang untuk "data besar" (tidak seperti, katakanlah, SAS) ada beberapa cara untuk mengatasinya. Ketersediaan paket adalah apa yang membuat perbedaan, sungguh.

Saya hanya membaca spesifikasi bahasa Clojure, dan itu indah dan bersih. Ini membahas secara alami masalah paralelisasi dan skala. Dan jika Anda memiliki pengetahuan dasar java atau OOP, Anda bisa mendapat manfaat dari sejumlah besar perpustakaan java berkualitas tinggi.

Masalah yang saya miliki dengan Clojure adalah bahwa itu adalah operasi one-man (R.Hickey) baru-baru ini, oleh karena itu 1) sangat berisiko 2) sangat tidak dewasa 3) dengan adopsi niche. Sangat cocok untuk penggemar, pengadopsi awal, orang-orang CS / ML yang ingin mencoba hal baru. Untuk pengguna yang melihat bahasa sebagai alat untuk mencapai tujuan dan yang membutuhkan kode yang sangat kuat yang dapat dibagikan kode dengan orang lain, bahasa yang sudah mapan tampaknya merupakan pilihan yang lebih aman. Hanya tahu siapa dirimu.


+1 Jawaban bagus. Saya memiliki perdebatan serupa beberapa waktu lalu karena saya tertarik oleh Incanter (dan telah melakukan beberapa kode Java). Jelas bahwa R adalah bahasa yang digunakan untuk menyelesaikan pekerjaan statistik dengan cepat sedangkan Clojure adalah bahasa yang digunakan untuk berpikir lebih seperti seorang ilmuwan komputer. Jelas ada tumpang tindih tetapi seperti yang Anda katakan "tahu siapa Anda".
Josh Hemann

SAS sangat tua sehingga awalnya dijalankan pada kartu berlubang, karena itu sintaksnya canggung dan kuno. Sejumlah "desain data besar" -nya hanyalah keberuntungan yang bodoh karena pada awalnya dirancang untuk berjalan di "mainframe" yang memiliki memori lebih sedikit daripada ponsel Anda, dan yang menggunakan kartu berlubang untuk memasukkan data. Saya tidak akan mengatakan itu "dirancang" untuk Big Data, meskipun itu terjadi untuk menanganinya dengan baik.
Wayne

Saya memiliki kekhawatiran serupa tentang Clojure pada 2011 ketika saya pertama kali mendengarnya. Saya tidak sekarang, pada tahun 2014. Clojure dan komunitasnya cukup matang, dan ini sangat populer (setelah semua, ini adalah non-OO, fungsional, Lisp). Namun, saya tidak percaya Incanter akan mengejar R dalam jumlah paket (biasanya, jika Anda bisa memikirkannya, itu sudah dilakukan). Ada Clojure library Rincanter berdasarkan antarmuka Java-R JRI, tapi saya tidak yakin betapa mudahnya ini untuk digunakan.
Mars

5

Pembaruan (Agustus 2014): seperti komentar @gappy di bawah ini, sejak R versi 3.0.0 batasnya lebih tinggi dan berarti R mampu menangani kumpulan data yang lebih besar.

Inilah poin data: R memiliki "plafon data besar" , berguna untuk mengetahui apakah Anda berencana bekerja dengan set data besar.

Saya tidak yakin apakah batasan yang sama berlaku untuk Clojure / Incanter, apakah itu mengungguli R atau sebenarnya lebih buruk. Saya membayangkan JVM mungkin dapat menangani dataset besar, terutama jika Anda berhasil memanfaatkan kekuatan fitur malas Clojure.


1
R juga malas dievaluasi.

3
@mbq: Komentar Anda salah. R malas mengevaluasi variabel dalam definisi fungsi tetapi "kemalasan" bukanlah perilaku normal. Fungsi delayAssign () ada untuk memberi tahu juru bahasa untuk malas dengan penugasan variabel, tetapi penafsir akan melakukan evaluasi setelah setiap struktur data menunjuk ke variabel itu, apakah perlu dievaluasi atau tidak. Selanjutnya, perusahaan komersial Revolution Analytics Analytics harus membuat objek iterator untuk mendukung pemasaran mereka untuk menggunakan R dalam analisis "data besar".
Josh Hemann

Saya pikir jawaban ini harus diperbarui. Sejak R 3.0.0, R tidak lagi memiliki batasan elemen 2 ^ 31-1. Batasnya bukan 2 ^ 63-1 (saya percaya) dan 2 ^ 31-1 pada setiap dimensi array. Ini membuatnya cocok untuk objek besar dalam memori.
gappy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.