ฉันตั้งใจจะคิดออกว่าจะเขียนแพ็คเกจ แต่ยังไม่ได้ลงทุน สำหรับมินิโปรเจ็กต์แต่ละอันของฉันฉันเก็บฟังก์ชั่นระดับต่ำทั้งหมดของฉันไว้ในโฟลเดอร์ที่เรียกว่า 'ฟังก์ชั่น /' และใส่มันลงในเนมสเปซแยกต่างหากที่ฉันสร้างขึ้นอย่างชัดเจน
บรรทัดของรหัสต่อไปนี้จะสร้างสภาพแวดล้อมที่ชื่อว่า "myfuncs" บนเส้นทางการค้นหาหากยังไม่มีอยู่ (โดยใช้ไฟล์แนบ) และเติมด้วยฟังก์ชั่นที่มีอยู่ในไฟล์. r ในไดเรกทอรี 'functions /' ของฉัน (โดยใช้ sys.source) ฉันมักจะวางบรรทัดเหล่านี้ไว้ที่ด้านบนสุดของสคริปต์หลักของฉันซึ่งมีไว้สำหรับ "ส่วนต่อประสานผู้ใช้" ซึ่งเรียกฟังก์ชั่นระดับสูง (เรียกใช้ฟังก์ชั่นระดับต่ำ)
if( length(grep("^myfuncs$",search()))==0 )
attach("myfuncs",pos=2)
for( f in list.files("functions","\\.r$",full=TRUE) )
sys.source(f,pos.to.env(grep("^myfuncs$",search())))
เมื่อคุณทำการเปลี่ยนแปลงคุณสามารถหาแหล่งที่มาใหม่ด้วยบรรทัดเดียวกันหรือใช้สิ่งที่ต้องการ
evalq(f <- function(x) x * 2, pos.to.env(grep("^myfuncs$",search())))
เพื่อประเมินการเพิ่ม / การดัดแปลงในสภาพแวดล้อมที่คุณสร้างขึ้น
เป็นเรื่องไร้สาระที่ฉันรู้ แต่หลีกเลี่ยงที่จะเป็นทางการมากเกินไปเกี่ยวกับเรื่องนี้ (แต่ถ้าคุณได้รับโอกาสฉันจะสนับสนุนระบบแพ็กเกจ - หวังว่าฉันจะโยกย้ายแบบนั้นในอนาคต)
สำหรับอนุสัญญาการเข้ารหัสนี่เป็นสิ่งเดียวที่ฉันเห็นเกี่ยวกับสุนทรียภาพ (ฉันชอบพวกเขาและทำตามอย่างหลวม ๆ แต่ฉันไม่ได้ใช้เครื่องมือจัดฟันแบบโค้งมากเกินไปใน R):
http://www1.maths.lth.se/help/R/RCC/
มี "อนุสัญญา" อื่น ๆ เกี่ยวกับการใช้ [, drop = FALSE] และ <- ตามที่โอเปอเรเตอร์มอบหมายที่แนะนำในงานนำเสนอต่าง ๆ (โดยปกติคือคำปราศรัย) ที่ useR! การประชุม แต่ฉันไม่คิดว่าสิ่งเหล่านี้จะเข้มงวด (แม้ว่า [, drop = FALSE] จะเป็นประโยชน์สำหรับโปรแกรมที่คุณไม่แน่ใจเกี่ยวกับข้อมูลที่คุณคาดหวัง)