ซอร์สโค้ด R แพ็กเกจแรกเพื่อศึกษาในการเตรียมการเขียนแพ็กเกจของตัวเอง


47

ฉันวางแผนที่จะเริ่มเขียนแพ็คเกจ R

ฉันคิดว่ามันเป็นการดีที่จะศึกษาซอร์สโค้ดของแพ็กเกจที่มีอยู่เพื่อเรียนรู้ข้อตกลงการสร้างแพ็กเกจ

เกณฑ์ของฉันสำหรับแพ็คเกจที่ดีในการศึกษา:

  • แนวคิดทางสถิติ / ทางเทคนิคอย่างง่าย : ประเด็นคือเพื่อเรียนรู้เกี่ยวกับกลไกการสร้างบรรจุภัณฑ์ การทำความเข้าใจกับแพ็คเกจไม่จำเป็นต้องมีความรู้เฉพาะโดเมนอย่างละเอียดเกี่ยวกับหัวข้อจริงของแพ็คเกจ
  • สไตล์การเขียนโปรแกรมที่เรียบง่ายและธรรมดา : ฉันกำลังมองหาบางสิ่งที่มากกว่าHello Worldแต่ไม่มากไปกว่านี้อีกแล้ว เทคนิคและไอเดียการซิงค์จะเบี่ยงเบนความสนใจเมื่อเรียนรู้แพ็กเกจ R ครั้งแรก
  • รูปแบบการเข้ารหัสที่ดี : รหัสนั้นเขียนได้ดี มันแสดงให้เห็นทั้งความเข้าใจในการเขียนโปรแกรมที่ดีโดยทั่วไปและการรับรู้ถึงอนุสัญญาของการเข้ารหัสในอาร์

คำถาม:

  • แพ็คเกจไหนดีที่จะเรียน?
  • ทำไมรหัสแหล่งข้อมูลแพ็กเกจที่แนะนำจะดีต่อการศึกษาเทียบกับเกณฑ์ที่กล่าวถึงข้างต้นหรือเกณฑ์อื่น ๆ ที่อาจเกี่ยวข้อง

Update (13/12/2010) การ ติดตามความคิดเห็นของเดิร์คฉันต้องการทำให้ชัดเจนว่าไม่ต้องสงสัยเลยว่าแพคเกจมากมายจะเป็นการดีที่จะศึกษาก่อน ฉันยอมรับด้วยว่าแพคเกจจะให้แบบจำลองสำหรับสิ่งต่าง ๆ (เช่น vignettes, คลาส S3, คลาส S4, การทดสอบหน่วย, Roxygen ฯลฯ ) อย่างไรก็ตามมันน่าสนใจที่จะอ่านคำแนะนำที่เป็นรูปธรรมเกี่ยวกับแพ็คเกจที่ดีที่จะเริ่มต้นและสาเหตุที่พวกเขาจะเป็นแพ็คเกจที่ดีที่จะเริ่มต้นด้วย

ฉันได้อัปเดตคำถามข้างต้นด้วยเพื่ออ้างถึง "แพ็คเกจ" แทนที่จะเป็น "แพ็คเกจ"


2
วิธีการดูที่นี้ก็คือการมองหาแพคเกจโดยเฉพาะอย่างยิ่งผู้เขียน ; ผู้เขียนบางคนเก่งในการทำตามแนวทางปฏิบัติที่ดีที่สุดและการเขียนรหัสที่ชัดเจนซึ่งในกรณีนี้คุณสามารถศึกษาเนื้อหาทั้งหมดของพวกเขาได้
เชน

1
@Shane จุดที่ดี ข้อเสนอแนะใด ๆ เกี่ยวกับผู้เขียนแพ็กเกจซึ่งอาจเป็นเรื่องดีที่จะศึกษาเมื่อเรียนรู้การเขียนแพ็คเกจครั้งแรก
Jeromy Anglim

คำตอบ:


15

ฉันขอแนะนำให้ดูแพคเกจสวนสัตว์ด้วยเหตุผลดังต่อไปนี้:

  1. มันมีหลายบทความที่เขียนดี;
  2. มันใช้ namespace ใช้useDynLib, import, exportและS3method;
  3. แต่ก็มีการทดสอบหลายหน่วยใช้RUnit;
  4. มันมีตัวอย่างที่ดีของวิธีการสร้าง / วิธี S3 เอกสาร;
  5. มันมีการโทรไปยังรหัส C ผ่านทาง.Callอินเตอร์เฟส;
  6. มันมีการสาธิต (พล็อต);
  7. มันมีจุดมุ่งหมายเพื่อให้สอดคล้องกับการติดตั้งคอร์ R (เช่นฟังก์ชั่นทำงานในลักษณะเดียวกันมันไม่ได้ปิดบัง / แทนที่ฟังก์ชั่นพื้นฐาน ฯลฯ )

มันไม่ได้ใช้ roxygen ซึ่งมีประโยชน์มาก แต่ 7 จาก 8 ไม่เลว ;-)

ในการตอบสนองต่อเกณฑ์ของคุณ:

  1. แนวคิดง่าย: zooเป็นเมทริกซ์เช่น class ได้รับคำสั่งจากบางสิ่งบางอย่าง ไม่จำเป็นต้องมีความรู้เฉพาะโดเมน
  2. zoo ดูเหมือนจะมีข้อตกลงการเข้ารหัสแบบแปลก ๆ แต่ไม่มีอะไรมากไปกว่าการป้องกันการเข้าใจโค้ด
  3. zoo มีจุดมุ่งหมายเพื่อให้สอดคล้องกับ R ที่สุด

1
จะหาแพ็คเกจนี้ได้ที่ไหน?
Adam SA

@ Adam: ฉันเพิ่มลิงค์ไปยังสวนสัตว์ในคำตอบของฉัน หน้านั้นยังมีลิงค์ไปยังหน้าโครงการ R-forge ของสวนสัตว์
Joshua Ulrich

9

ฉันไม่คิดว่าตัวเองเป็นผู้พัฒนาแพ็คเกจ R ที่จัดตั้งขึ้น แต่เพิ่งได้รับขั้นตอนการเขียนและบำรุงรักษาแพ็กเกจสำหรับสภาพแวดล้อมการทำงานของฉัน

ก่อนหน้านี้ฉันเคยเขียน / ดูแล / อัปเดตชุดของสคริปต์ที่ฉันจะผ่านจากโปรเจ็กต์ไปยังโปรเจ็กต์ผ่านsource()ฟังก์ชั่น ผลลัพธ์ที่ได้จากการทำเช่นนี้คือฉันจะลงเอยด้วยสคริปต์ซ้ำซ้อนส่วนใหญ่ที่แขวนอยู่ในสถานที่ต่าง ๆ บนไดรฟ์เครือข่ายของเรา ไม่ชัดเจนว่าเป็นที่ตั้งของสคริปต์ที่ทันสมัยที่สุด ฉันได้ย้ายไปเขียน / ดูแลแพ็คเกจโดยใช้ roxygen ตั้งแต่นั้นเป็นต้นมา มันทำให้ชีวิตของฉันง่ายขึ้นอย่างมากและทำให้การแบ่งปันงานกับเพื่อนร่วมงานง่ายขึ้น

ตามเกณฑ์ของคุณข้างต้นฉันขอแนะนำให้คุณตรวจสอบแพ็คเกจที่ Hadley เขียนไว้ โดยเฉพาะอย่างยิ่งฉันคิดว่าการอ่านวิกิ devtoolsจะเป็นประโยชน์อย่างมาก รหัสของ Hadley ได้รับการบันทึกไว้อย่างดีและหลายแพ็คเกจของเขาใช้ roxygen ฉันคิดว่าการเขียนและการบำรุงรักษาเอกสารเดียวสำหรับทั้งฟังก์ชั่น R และเอกสาร R นั้นง่ายกว่าการแบ่งออกเป็นสองที่ตั้ง (ไฟล์. R และ. RD)

แพ็คเกจของ Hadley ยังให้บริการแนวคิดพื้นฐานที่ค่อนข้างเป็นธรรมและค่อนข้างง่ายที่จะทำให้เสื่อมเสีย (imho) หากคุณกำลังมองหาพอยน์เตอร์เกี่ยวกับแนวคิดด้านเทคนิค ฉันพบว่าตัวเองกำลังขุดผ่านซอร์สโค้ดplyrเมื่อฉันกำลังมองหาตัวชี้ในเอกสาร roxygen หรืองานพื้นฐานอื่น ๆ


ขอบคุณ โดยเฉพาะอย่างยิ่ง devtools wiki มีแนวคิดที่ยอดเยี่ยมมากมาย
Jeromy Anglim

@ Jerer - ต้องอ่านบทความล่าสุดของคุณเกี่ยวกับการวิจัยที่ทำซ้ำได้ ฯลฯ (uber uber มีประโยชน์มากขอบคุณมาก! ฉันควรจะพูดถึงด้วยว่า Eclipse สนับสนุนไวยากรณ์ของ roxygen และทำให้มันง่ายในการเปลี่ยน งานที่ยากที่สุดที่ฉันจะเอาชนะได้คือการเขียนบทความสั้น ๆ ที่มีประโยชน์และมีประสิทธิผล ฉันคิดว่าคุณเริ่มจากจุดกระโดดสูงกว่าที่ฉันคิด
Chase

2
แค่อย่าอ่านซอร์ส ggplot2 มันจะทำให้สมองของคุณตกเลือด
Hadley

นักพัฒนา R ซื่อสัตย์คนนี้!
Leo5188

7

ทำไมไม่ลองใช้วิธีการสุ่มตัวอย่างด้วยวิธีเชิงประจักษ์ เพียงแค่เลือกไม่กี่ข้อและดูว่าอะไรเหมาะกับคุณ

ล้อเล่นกันดูที่แพ็คเกจที่คุณใช้และคุ้นเคย ดาวน์โหลดได้ง่ายหรือถ้าคุณต้องการคุณสามารถดูผ่านเว็บอินเตอร์เฟสที่ R-Forge, RForge หรือ Github

คุณน่าจะจบลงด้วยแพ็คเกจที่แตกต่างกันสำหรับความคิดที่แตกต่างกัน บางคนอาจช่วยคุณในการรวมพูดบทความสั้น ๆ บางคนอาจช่วยในการรวบรวมรหัส หรือทดสอบหน่วย หรือ Roxygen มีประมาณ 2,600 ของพวกเขาดังนั้นทำไมครอบงำมากกว่าหนึ่งที่ดีที่สุด?


จุดที่ดี ฉันกำลังวางแผนที่จะสำรวจตัวเอง และแน่นอนว่าการสำรวจนั้นสนุกไปกว่าครึ่ง และฉันเห็นด้วยกับแพ็คเกจต่าง ๆ ที่สอนสิ่งต่าง ๆ ฉันยอมรับว่าแพ็คเกจจำนวนมากจะเป็นจุดเริ่มต้นที่ดี ฉันจะอัปเดตคำถามของฉันเพื่อสะท้อนความคิดที่ว่าหลายแพคเกจจะตรงตามเกณฑ์ แต่การมีคำแนะนำที่เป็นรูปธรรมอาจช่วยตัวเองและคนอื่น ๆ ให้รู้จักกับแพ็คเกจ R ในบางครั้ง ฉันยังคิดว่าผู้พัฒนาแพ็คเกจ R ที่จัดตั้งขึ้นนั้นอยู่ในตำแหน่งที่ดีกว่าที่จะแสดงความคิดเห็นเกี่ยวกับข้อดีของแพ็คเกจที่กำหนดเพื่อวัตถุประสงค์ในการเรียนรู้
Jeromy Anglim

2
เพราะว่าคุณจะต้องเริ่มต้นที่ไหนสัก :)
hans0l0

2

คำแนะนำอีกข้อหนึ่งอาจจะดูที่แพ็คเกจของคุณจะขึ้นอยู่กับหรือมีปฏิสัมพันธ์โดยเฉพาะอย่างยิ่งหากใช้บางรายการที่ Joshua Ulrichกล่าวถึงหรือเขียนโดยนักเขียนชื่อดัง อาจเป็นประโยชน์ในการเรียนรู้วิธีการทำสิ่งต่าง ๆ ในสาขาของคุณเพื่อให้แน่ใจว่ามีความเข้ากันได้ บ่อยครั้งที่ผู้คนจะคิดเกี่ยวกับปัญหาบางอย่างและการอ่านทางออกของพวกเขาจะเป็นประโยชน์


1

ฉันอยากจะแนะนำแพคเกจการก่อร่างใหม่ของ Hadley คุณสามารถค้นหาแหล่งที่มาได้ที่https://github.com/hadley/reshape


2
ขอบคุณ ทำไมคุณถึงแนะนำ
Jeromy Anglim

4
ฉันจะไม่แนะนำการก่อร่างใหม่แม้ว่าฉันจะไม่เข้าใจว่ามันทำงานอย่างไร Reshape2 นั้นดีกว่ามากและเป็นไปตามหลักการพัฒนาที่ดีขึ้นมากมาย
hadley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.