Hadley Wickham " Advanced R " มีคำแนะนำและการอ้างอิงที่ดี ฉันกำลังจำลองส่วนนี้เพื่อการจัดทำดัชนีที่ดีขึ้น
การเลือกระบบ
ระบบ OO สามระบบนั้นมีมากมายสำหรับภาษาเดียว แต่สำหรับการเขียนโปรแกรม R ส่วนใหญ่นั้นเพียงพอเพียง S3 ใน R คุณมักจะสร้างวัตถุและวิธีการที่ค่อนข้างง่ายสำหรับฟังก์ชั่นทั่วไปที่มีอยู่ก่อนเช่น print (), summary () และ plot () S3 เหมาะกับงานนี้และรหัส OO ส่วนใหญ่ที่ฉันเขียนใน R คือ S3 S3 นั้นแปลกนิดหน่อย แต่มันก็ทำให้งานเสร็จด้วยโค้ดขั้นต่ำ
หากคุณกำลังสร้างระบบที่ซับซ้อนมากขึ้นของวัตถุที่สัมพันธ์กัน S4 อาจเหมาะสมกว่า ตัวอย่างที่ดีคือแพ็คเกจ Matrix โดย Douglas Bates และ Martin Maechler มันถูกออกแบบมาเพื่อเก็บและคำนวณอย่างมีประสิทธิภาพด้วยเมทริกซ์กระจัดกระจายหลายประเภท ในเวอร์ชัน 1.1.3 จะกำหนด 102 คลาสและ 20 ฟังก์ชันทั่วไป แพคเกจนั้นเขียนได้ดีและให้ความเห็นเป็นอย่างดีและบทความสั้น ๆ (vignette ("Intro2Matrix", package = "Matrix")) ให้ภาพรวมที่ดีของโครงสร้างของแพ็คเกจ S4 ยังใช้อย่างกว้างขวางโดยแพ็คเกจ Bioconductor ซึ่งจำเป็นต้องสร้างแบบจำลองความสัมพันธ์ที่ซับซ้อนระหว่างวัตถุชีวภาพ Bioconductor ให้ทรัพยากรที่ดีมากมายสำหรับการเรียนรู้ S4 หากคุณเชี่ยวชาญ S3, S4 นั้นค่อนข้างง่ายต่อการรับ ความคิดเหมือนกันหมด
หากคุณตั้งโปรแกรมด้วยภาษา OO หลัก RC จะดูเป็นธรรมชาติมาก แต่เนื่องจากพวกเขาสามารถแนะนำผลข้างเคียงผ่านสภาวะที่ไม่แน่นอนพวกเขาจึงยากที่จะเข้าใจ ตัวอย่างเช่นเมื่อคุณมักจะเรียก f (a, b) ใน R คุณสามารถสันนิษฐานได้ว่า a และ b จะไม่ถูกแก้ไข แต่ถ้า a และ b เป็นวัตถุ RC พวกมันอาจถูกดัดแปลงในสถานที่นั้น โดยทั่วไปเมื่อใช้วัตถุ RC คุณต้องการลดผลข้างเคียงให้น้อยที่สุดเท่าที่จะทำได้และใช้เฉพาะเมื่อจำเป็นต้องมีสถานะที่ไม่แน่นอน ฟังก์ชั่นส่วนใหญ่ควรจะ“ ทำงานได้” และไม่มีผลข้างเคียง ทำให้โค้ดง่ายขึ้นในการให้เหตุผลและง่ายกว่าสำหรับโปรแกรมเมอร์ R คนอื่นที่จะเข้าใจ
เขาอ้างอิง " การสอนที่เป็นประโยชน์เกี่ยวกับการเขียนโปรแกรม S4 "
มีแหล่งข้อมูลที่น่าสนใจอื่น ๆ อีกมากมายหากคุณทำตามคำแนะนำของเขา
John M. Chambers กล่าวใน"การเขียนโปรแกรมเชิงวัตถุ, ฟังก์ชั่นการเขียนโปรแกรมและ R" :
R ยังได้รับอิทธิพลอย่างมากจากแนวคิดของการเขียนโปรแกรมเชิงหน้าที่และโดยเฉพาะอย่างยิ่งความปรารถนาที่จะรวมการทำงานกับการเขียนโปรแกรมเชิงวัตถุ
จะเพิ่มบางสิ่งบางอย่างที่ไม่เกี่ยวข้องโดยตรงกับคำถาม แต่ตามความคิดเดียวกัน: "DataFrames ใน Spark สำหรับขนาดใหญ่ข้อมูลวิทยาศาสตร์" เนื่องจากสิ่งนี้ทำให้สกาล่าและอาร์ใกล้ขึ้นจึงอาจมีการรวมพลัง OO / ฟังก์ชั่นที่ยอดเยี่ยมออกมาจากสิ่งนี้