Clojure so với R: ưu điểm và nhược điểm để phân tích dữ liệu


39

Tôi đã có một kế hoạch học R trong tương lai gần. Đọc một câu hỏi khác tôi phát hiện ra về Clojure. Bây giờ tôi không biết phải làm gì.

Tôi nghĩ rằng một lợi thế lớn của R đối với tôi là một số người trong Kinh tế sử dụng nó, bao gồm một trong những người giám sát của tôi (mặc dù người khác nói: tránh xa R!). Một lợi thế của Clojure là nó dựa trên Lisp, và khi tôi bắt đầu học Emacs và tôi rất thích viết các tùy chỉnh của riêng mình, nó sẽ rất hữu ích (vâng, tôi biết Clojure và Elisp là các phương ngữ khác nhau của Lisp, nhưng chúng là cả Lisp và do đó tương tự tôi sẽ tưởng tượng).

Tôi không thể hỏi cái nào tốt hơn, bởi vì tôi biết điều này rất riêng tư, nhưng ai đó có thể cho tôi những lợi thế (hoặc lợi thế) của Clojure x R, đặc biệt là về mặt thực tế không? Ví dụ, cái nào nên dễ học hơn, cái nào linh hoạt hơn hay mạnh hơn, cái nào có nhiều thư viện hơn, hỗ trợ nhiều hơn, nhiều người dùng hơn, v.v.?

Mục đích sử dụng của tôi : Phần lớn ước tính của tôi nên được thực hiện bằng Matlab, vì vậy tôi không tìm kiếm bất cứ điều gì quá sâu về phân tích thống kê, mà là một phần mềm để thay thế Excel cho thao tác và hiển thị dữ liệu ban đầu, thống kê tóm tắt và biểu đồ, nhưng cũng có một số phân tích thống kê cơ bản hoặc những nỗ lực ban đầu theo ước tính của tôi.


10
Nếu bạn thích R, rất có thể bạn sẽ từ chức khỏi MATLAB (như trong trường hợp của tôi).

IMO, đây phải là wiki cộng đồng (các câu hỏi kiểu "so với" khá chủ quan).
Shane

Đây chắc chắn là một câu hỏi liên quan đến ngôn ngữ lập trình và nên được hỏi trên Stack Overflow.
Sharpie

Tôi đồng ý với Sharpie. @Vivi: bạn nên thay đổi tiêu đề câu hỏi thành "lợi thế và bất lợi cho việc trộn dữ liệu" hoặc một cái gì đó dọc theo dòng đó để nó có nhiều chủ đề hơn.
Shane

5
@Sharpie, @Shane IMO đến mức này là một câu hỏi về các công cụ, vì vậy nó được chấp nhận.

Câu trả lời:


27

Hãy để tôi bắt đầu bằng cách nói rằng tôi yêu cả hai ngôn ngữ: bạn không thể sai với một trong hai ngôn ngữ đó và chúng chắc chắn tốt hơn một thứ như C ++ hoặc Java để phân tích dữ liệu.

Để phân tích dữ liệu cơ bản, tôi sẽ đề xuất R (đặc biệt là với plyr). IMO, R dễ học hơn một chút so với Clojure, mặc dù điều này không hoàn toàn rõ ràng vì Clojure dựa trên Lisp và có rất nhiều tài nguyên Lisp tuyệt vời có sẵn (như SICP ). Có ít từ khóa hơn trong Clojure, nhưng các thư viện khó cài đặt và làm việc hơn nhiều. Ngoài ra, hãy nhớ rằng R (hoặc S) phần lớn có nguồn gốc từ Scheme, vì vậy bạn sẽ được hưởng lợi từ kiến ​​thức Lisp khi sử dụng nó.

Nói chung:

Ưu điểm chính của R là cộng đồng trên CRAN (hơn 2461 gói và tính). Không có gì sẽ so sánh với điều này trong tương lai gần, thậm chí không phải là một ứng dụng thương mại như MATLAB.

Clojure có lợi thế lớn khi chạy trên JVM, có nghĩa là nó có thể sử dụng bất kỳ thư viện dựa trên Java nào ngay lập tức.

Tôi sẽ nói thêm rằng tôi đã nói chuyện liên quan đến Clojure / Incanter cho R một thời gian trước đây, vì vậy bạn có thể thấy nó thú vị. Theo kinh nghiệm của tôi về việc tạo ra điều này, Clojure thường chậm hơn R đối với các thao tác đơn giản.


11

Tôi đã là một người dùng R nặng trong 6-7 năm qua. Là một ngôn ngữ, nó có một số hạn chế thiết kế. Tuy nhiên, đối với công việc trong kinh tế lượng và phân tích dữ liệu, tôi vẫn hết lòng giới thiệu nó. Nó có một số lượng lớn các gói có liên quan đến bạn về kinh tế lượng, chuỗi thời gian, mô hình lựa chọn của người tiêu dùng, v.v. và tất nhiên là trực quan tuyệt vời, đại số tốt và thư viện số, v.v. Tôi sẽ không lo lắng quá nhiều về giới hạn kích thước dữ liệu. Mặc dù R không được thiết kế cho "dữ liệu lớn" (không giống như, giả sử, SAS) có nhiều cách xung quanh nó. Sự sẵn có của các gói là những gì làm nên sự khác biệt, thực sự.

Tôi chỉ đọc thông số ngôn ngữ của Clojure, và nó rất đẹp và sạch sẽ. Nó giải quyết một cách tự nhiên các vấn đề song song và quy mô. Và nếu bạn có một số kiến ​​thức java hoặc OOP cơ bản, bạn có thể hưởng lợi từ số lượng lớn các thư viện java chất lượng cao.

Vấn đề tôi gặp phải với Clojure là hoạt động một người gần đây (R.Hickey), do đó 1) rất rủi ro 2) rất non nớt 3) với việc áp dụng thích hợp. Tuyệt vời cho những người đam mê, những người chấp nhận sớm, những người CS / ML muốn thử những điều mới. Đối với người dùng coi ngôn ngữ là phương tiện để kết thúc và người cần mã rất mạnh có thể chia sẻ mã với người khác, ngôn ngữ đã thiết lập có vẻ là lựa chọn an toàn hơn. Chỉ cần biết bạn là ai.


+1 Câu trả lời tuyệt vời. Tôi đã có một cuộc tranh luận tương tự một thời gian trước bởi vì tôi bị hấp dẫn bởi Incanter (và đã thực hiện một số mã hóa Java). Rõ ràng R là ngôn ngữ được sử dụng để hoàn thành công việc thống kê một cách nhanh chóng trong khi Clojure là ngôn ngữ được sử dụng để suy nghĩ giống một nhà khoa học máy tính hơn. Rõ ràng là có sự chồng chéo nhưng như bạn nói "biết bạn là ai".
Josh Hemann

SAS quá cũ đến nỗi ban đầu nó chạy trên các thẻ đục lỗ, do đó cú pháp khó hiểu và cổ xưa của nó. Một số lượng "thiết kế dữ liệu lớn" của nó chỉ đơn giản là may mắn khi nó được thiết kế ban đầu để chạy trên "máy tính lớn" có ít bộ nhớ hơn điện thoại của bạn và sử dụng thẻ đục lỗ để nhập dữ liệu. Tôi sẽ không nói nó "được thiết kế" cho Dữ liệu lớn, mặc dù điều đó xảy ra để xử lý nó tốt.
Wayne

Tôi đã có những lo ngại tương tự về Clojure vào năm 2011 khi lần đầu tiên tôi nghe về nó. Bây giờ tôi không, vào năm 2014. Clojure và cộng đồng của nó khá trưởng thành và nó nổi tiếng một cách đáng ngạc nhiên (xét cho cùng, nó không phải là OO, chức năng, Lisp). Tuy nhiên, tôi không tin Incanter sẽ bắt kịp R về số lượng gói (thông thường, nếu bạn có thể nghĩ về nó, nó đã được thực hiện). Có Rincanter thư viện Clojure dựa trên giao diện JRI Java-R, nhưng tôi không chắc cách này dễ sử dụng.
Sao Hỏa

5

Cập nhật (tháng 8 năm 2014): như các bình luận @gappy bên dưới, kể từ phiên bản R 3.0.0, các giới hạn cao hơn và có nghĩa là R có khả năng xử lý các bộ dữ liệu lớn hơn.

Đây là một điểm dữ liệu: R có "trần dữ liệu lớn" , rất hữu ích để biết bạn có kế hoạch làm việc với các tập dữ liệu khổng lồ hay không.

Tôi không chắc liệu các giới hạn tương tự có áp dụng cho Clojure / Incanter hay không, liệu nó có vượt trội hơn R hay thực sự tệ hơn. Tôi tưởng tượng JVM có thể có thể xử lý các bộ dữ liệu lớn, đặc biệt nếu bạn quản lý để khai thác sức mạnh của các tính năng lười biếng của Clojure.


1
R cũng lười đánh giá.

3
@mbq: Nhận xét của bạn là sai lệch. R lười biếng đánh giá các biến trong một định nghĩa hàm nhưng "sự lười biếng" không phải là hành vi bình thường. Hàm delayAssign () tồn tại để báo cho trình thông dịch lười biếng với phép gán của biến, nhưng trình thông dịch sẽ thực hiện đánh giá một khi bất kỳ cấu trúc dữ liệu nào trỏ đến biến đó, cho dù nó có cần được đánh giá hay không. Hơn nữa, Revolution Analytics của công ty thương mại phải tạo ra một đối tượng lặp để hỗ trợ tiếp thị của họ khi sử dụng R trong phân tích "dữ liệu lớn".
Josh Hemann

Tôi nghĩ rằng câu trả lời này nên được cập nhật. Kể từ R 3.0.0, R không còn giới hạn 2 ^ 31-1 phần tử nữa. Giới hạn không phải là 2 ^ 63-1 (tôi tin) và 2 ^ 31-1 trên mỗi chiều của một mảng. Điều này làm cho nó phù hợp cho các đối tượng lớn trong bộ nhớ.
vui vẻ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.