Clojure กับ R: ข้อดีและข้อเสียสำหรับการวิเคราะห์ข้อมูล


39

ฉันมีแผนการเรียนรู้ R ในอนาคตอันใกล้ อ่านคำถามอื่นฉันพบเกี่ยวกับ Clojure ตอนนี้ฉันไม่รู้จะทำยังไง

ฉันคิดว่าข้อได้เปรียบที่ยิ่งใหญ่ของ Rสำหรับฉันคือบางคนในสาขาเศรษฐศาสตร์ใช้มันรวมถึงหนึ่งในหัวหน้างานของฉัน (แม้ว่าอีกคนหนึ่งพูดว่า: อยู่ห่างจาก R!) ข้อดีอย่างหนึ่งของ Clojureก็คือมันเป็นเสียงกระเพื่อมและเมื่อฉันเริ่มเรียนรู้ Emacs และฉันกระตือรือร้นที่จะเขียนการปรับแต่งของตัวเองมันจะมีประโยชน์ (ใช่ฉันรู้ว่า Clojure และ Elisp เป็นภาษาถิ่นที่แตกต่างกันของ Lisp แต่พวกเขา ทั้งเสียงกระเพื่อมและคล้ายกันฉันจะจินตนาการ)

ฉันไม่สามารถถามได้ว่าอันไหนดีกว่าเพราะฉันรู้ว่านี่เป็นเรื่องส่วนตัว แต่ใครบางคนสามารถให้ข้อดี (หรือข้อดี) ของ Clojure x R โดยเฉพาะอย่างยิ่งในแง่ของการใช้งานจริง? ตัวอย่างเช่นสิ่งใดที่ควรเรียนรู้ได้ง่ายกว่าอันใดอันใดยืดหยุ่นกว่าหรือทรงพลังยิ่งกว่าอันใดอันใดมีห้องสมุดมากขึ้นสนับสนุนมากขึ้นผู้ใช้มากขึ้น ฯลฯ

การใช้งานที่ฉันตั้งใจ : การประเมินจำนวนมากของฉันควรทำโดยใช้ Matlab ดังนั้นฉันไม่ได้มองหาอะไรที่ลึกเกินไปในแง่ของการวิเคราะห์ทางสถิติ แต่เป็นซอฟต์แวร์ที่ใช้แทน Excel สำหรับการจัดการข้อมูลและการมองเห็นเริ่มต้นสถิติสรุปและการสร้างแผนภูมิ แต่ยังมีการวิเคราะห์ทางสถิติขั้นพื้นฐานหรือความพยายามครั้งแรกที่การประเมินของฉัน


10
หากคุณจะได้ลิ้มรส R มันเป็นไปได้สูงมากที่คุณจะลาออกจาก MATLAB (อย่างในกรณีของฉัน)

IMO นี่ควรเป็นวิกิชุมชน (คำถามประเภท "กับ" เป็นคำถามที่ค่อนข้างอัตนัย)
เชน

นี่เป็นคำถามเกี่ยวกับภาษาการเขียนโปรแกรมและควรถามใน Stack Overflow
Sharpie

ฉันเห็นด้วยกับ Sharpie @Vivi: คุณควรเปลี่ยนชื่อคำถามเป็น "ข้อดีและข้อเสียสำหรับ data munging" หรือบางอย่างตามบรรทัดนั้นเพื่อให้เป็นหัวข้อเพิ่มเติม
เชน

5
@Sharpie @Shane IMO ในระดับนี้เป็นคำถามเกี่ยวกับเครื่องมือจึงเป็นที่ยอมรับ

คำตอบ:


27

ให้ฉันเริ่มด้วยการบอกว่าฉันรักทั้งสองภาษา: คุณไม่สามารถผิดพลาดได้ด้วยและพวกเขาก็ดีกว่า C ++ หรือ Java อย่างแน่นอนสำหรับการวิเคราะห์ข้อมูล

สำหรับการวิเคราะห์ข้อมูลพื้นฐานฉันจะแนะนำ R (โดยเฉพาะอย่างยิ่งกับ plyr) IMO, R นั้นง่ายกว่าที่จะเรียนรู้มากกว่า Clojure แม้ว่าจะไม่ชัดเจนอย่างสมบูรณ์เนื่องจาก Clojure นั้นใช้ 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 เท่านั้นและมันก็สวยและสะอาด มันแก้ไขปัญหาธรรมชาติของการขนานและสเกล และถ้าคุณมีความรู้พื้นฐานเกี่ยวกับจาวาหรือ OOP คุณสามารถได้รับประโยชน์จากไลบรารี java คุณภาพสูงจำนวนมาก

ปัญหาที่ฉันมีกับ Clojure ก็คือการดำเนินการของชายคนหนึ่ง (R.Hickey) เมื่อเร็ว ๆ นี้ดังนั้น 1) มีความเสี่ยงสูง 2) ยังไม่บรรลุนิติภาวะมาก 3) มีการยอมรับเฉพาะกลุ่ม เหมาะสำหรับผู้ที่ชื่นชอบผู้ใช้งานช่วงเริ่มต้นคน CS / ML ที่ต้องการลองสิ่งใหม่ ๆ สำหรับผู้ใช้ที่เห็นภาษาเป็นเครื่องมือในการสิ้นสุดและผู้ที่ต้องการรหัสที่แข็งแกร่งมากที่สามารถใช้รหัสร่วมกับผู้อื่นภาษาที่จัดตั้งขึ้นจะเป็นตัวเลือกที่ปลอดภัยกว่า เพิ่งรู้ว่าคุณเป็นใคร


+1 คำตอบที่ดี ฉันมีการถกเถียงที่คล้ายกันมาพักนึงเพราะฉันสนใจ Incanter (และได้ทำการเข้ารหัส Java) เห็นได้ชัดว่า R เป็นภาษาที่ใช้ในการทำงานเชิงสถิติอย่างรวดเร็วในขณะที่ Clojure เป็นภาษาที่ใช้ในการคิดมากกว่านักวิทยาศาสตร์คอมพิวเตอร์ เห็นได้ชัดว่ามีการทับซ้อนกัน แต่ในขณะที่คุณพูดว่า "รู้ว่าคุณเป็นใคร"
Josh Hemann

SAS นั้นเก่าแก่แล้ว แต่เดิมมันรันบนการ์ดที่ถูกเจาะดังนั้นไวยากรณ์ที่น่าอึดอัดใจและเก่าแก่ของมัน "การออกแบบข้อมูลขนาดใหญ่" จำนวนหนึ่งเป็นเพียงแค่ความโชคดีที่มันถูกออกแบบมาเพื่อทำงานบน "เมนเฟรม" ที่มีหน่วยความจำน้อยกว่าโทรศัพท์ของคุณและใช้การกดการ์ดเพื่อป้อนข้อมูล ฉันจะไม่พูดว่า "ออกแบบ" สำหรับ Big Data แม้ว่ามันจะเกิดขึ้นเพื่อจัดการกับมันได้ดี
เวย์น

ฉันมีความกังวลที่คล้ายกันเกี่ยวกับ Clojure ในปี 2011 เมื่อฉันได้ยินครั้งแรก ฉันไม่ได้ตอนนี้ในปี 2014 Clojure และชุมชนของมันค่อนข้างเป็นผู้ใหญ่และมันก็ได้รับความนิยมอย่างน่าประหลาดใจ อย่างไรก็ตามฉันไม่เชื่อว่า 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 ประเมินความเกียจคร้านของตัวแปรในนิยามฟังก์ชัน แต่ "ความเกียจคร้าน" ไม่ใช่พฤติกรรมปกติ ฟังก์ชั่น delayAssign () มีอยู่เพื่อแจ้งให้ล่ามฟังว่าขี้เกียจกับการกำหนดตัวแปร แต่ล่ามจะทำการประเมินเมื่อโครงสร้างข้อมูลใด ๆ ชี้ไปที่ตัวแปรนั้นไม่ว่าจะต้องมีการประเมินหรือไม่ก็ตาม นอกจากนี้ R Analytics ในเชิงพาณิชย์ของ บริษัท R Analytics ต้องสร้างวัตถุตัววนซ้ำเพื่อสนับสนุนการตลาดเพื่อใช้ R ในการวิเคราะห์ "ข้อมูลขนาดใหญ่"
Josh Hemann

ฉันคิดว่าคำตอบนี้ควรได้รับการปรับปรุง ตั้งแต่ R 3.0.0 วิจัยไม่ได้มีการ จำกัด ของ 2 ^ 31-1 องค์ประกอบอีกต่อไป ขีด จำกัด ไม่ได้เป็น 2 ^ 63-1 (ฉันเชื่อ) และ 2 ^ 31-1 สำหรับแต่ละมิติของอาร์เรย์ สิ่งนี้ทำให้มันเหมาะสำหรับวัตถุขนาดใหญ่ในหน่วยความจำ
gappy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.