อะไรคือการอ้างอิง / คำแนะนำที่ดีสำหรับการเรียนรู้ Emacs Speaks Statistics (with R)?


9

ฉันใช้ R มาหลายปีแล้ว แต่ฉันใช้ GUI อย่าง Tinn-R, JGR และ R-Studio ล่าสุด

แม้ว่าฉันจะชอบอินเตอร์เฟสของ R-Studio แต่ฉันรู้สึกว่าสำหรับโปรแกรมที่ยาวขึ้นโดยมีกราฟิกไม่กี่ตัว / ไม่มีเลยฉันสามารถเขียนโค้ดได้อย่างมีประสิทธิภาพมากขึ้นโดยใช้ประโยชน์จากทางลัดที่นำเสนอโดยโปรแกรมแก้ไขข้อความพื้นฐานเช่น Emacs

ฉันติดตั้ง Emacs และปลั๊กอิน ESS ทุกอย่างทำงานได้อย่างถูกต้องและฉันได้ทำการทดสอบโค้ดบางอย่าง แต่ฉันมีเวลายากที่จะชินกับมันและฉันไม่พบคู่มืออ้างอิงที่เหมาะสม

การค้นหาของ Google ส่งคืนเว็บไซต์เก่า ๆ จำนวนไม่มากที่มีบทแนะนำซึ่งเน้นที่การติดตั้งและกำหนดค่าปลั๊กอินเป็นหลักและคู่มือในเว็บไซต์อย่างเป็นทางการนั้นค่อนข้างหนาแน่นเกินไปสำหรับฉัน

ฉันกำลังมองหาการแนะนำสั้น ๆ (โดยเฉพาะกับภาพหน้าจอและรายการปุ่มลัด) ออกแบบมาสำหรับคนที่คุ้นเคยกับ R แต่ไม่ใช่ Emacs

การอ้างอิงหรือเคล็ดลับอื่น ๆ ในการเริ่มต้นจะได้รับการชื่นชมอย่างมาก

คำตอบ:


11

ก่อนอื่นคุณจะต้องเรียนรู้การใช้งานข้อความพื้นฐานกับ emacs เนื่องจาก emacs นั้นซับซ้อนมากในการค้นหาวิธีการเลือกข้อความและการคัดลอกอย่างง่ายอาจเป็นสิ่งที่ท้าทาย ดังนั้นลงทุนเวลาในการค้นหาวิธีการทำอย่างมีประสิทธิภาพ การอ่านคู่มืออาจช่วยได้ สำหรับ Mac OS X ใช้ Aquamacs รองรับการใช้งานทางลัดในตัว

การทำงานกับ ESS ไม่แตกต่างจากการทำงานกับ R ควรใช้กฎเดียวกันกับการจัดระเบียบรหัส ในกรณีของฉันทุกโครงการมีไดเรกทอรีของตัวเองซึ่งอยู่ในไดเรกทอรีหลักชื่อ R ซึ่งอยู่ในโฮมไดเร็กตอรี่ของฉัน (สำหรับ Windows ฉันแนะนำให้ชี้โฮมไดเร็กตอรี่ emacs ไปยังไดเรกทอรีที่แหล่งที่มาของคุณอยู่) ดังนั้นเมื่อฉันใช้ ESS เพื่อทำงานในโครงการฉันมักจะทำM-x Rและเลือกไดเรกทอรีเริ่มต้นไดเรกทอรีโครงการของฉัน

หลังจากเริ่มกระบวนการ R ฉันมักจะแบ่ง emacs ในสองหน้าต่าง (คำศัพท์ emacs) ด้านซ้ายฉันมีซอร์สโค้ดซึ่งฉันส่งไปยังกระบวนการ R ทางด้านขวา ทางลัดที่เกี่ยวข้อง (เหล่านี้เป็นทางลัด emacs) C-x 3สำหรับการแยกหน้าต่างแนวตั้งC-x 1เพื่อทำให้บัฟเฟอร์ปัจจุบันเป็นหน้าต่างเดียวและC-x 2สำหรับการแยกหน้าต่างในแนวนอน

เมื่อส่งรหัสไปที่ R ฉันจะแยกความแตกต่างระหว่างฟังก์ชั่นและงบ R 10code.Rฉันทำเช่นนี้โดยการเก็บรักษาฟังก์ชั่นของฉันทั้งหมดในไฟล์เดียวมักจะเรียกว่า จากนั้นฉันก็สามารถโหลดไฟล์นี้โดยใช้ตัวเลือกโหลดไฟล์ ESS (ทางลัดC-c C-l) ข้อได้เปรียบของวิธีนี้คือมันให้แหล่งที่มาของฟังก์ชั่นทั้งหมดและไม่สร้างอะไรเลยในบัฟเฟอร์ R หากมีข้อผิดพลาดในรหัสของคุณ ESS จะแสดงข้อความใน minibuffer และคุณสามารถตรวจสอบได้โดยการกดC-c`

อีกรหัสคือข้อความ R ซึ่งฉันพยายามอธิบายตนเอง: ข้อมูลโหลดข้อมูลที่สะอาดพอดีตัวแบบทางสถิติตรวจสอบผลลัพธ์สร้างผลลัพธ์สุดท้าย ซอร์สโค้ดสำหรับข้อความเหล่านี้คือสถานะปัจจุบันของโครงการ ความตั้งใจคือหลังจากที่โครงการเสร็จสิ้นการจัดหาไฟล์ด้วยรหัสนี้ให้ทำซ้ำโครงการ (ฉันยังใช้ git สำหรับการติดตามประวัติ) เมื่อทำงานกับไฟล์นี้ผมมักจะทำงานเฉพาะกับคำสั่ง R หนึ่งซึ่งผมส่งไปยังกระบวนการ R ผ่านฟังก์ชั่น EVAL C-c C-cวรรคคำสั่งคำสั่งซึ่งทางลัด คำสั่งนี้ส่งไปยังการประมวลผล R ย่อหน้าเช่นข้อความที่คั่นด้วยบรรทัดใหม่ สิ่งนี้มีประโยชน์เนื่องจากคุณสามารถจัดกลุ่มคำสั่ง R ในงานและส่งงานทั้งหมดไปยังกระบวนการ R นอกจากนี้ยังไม่จำเป็นต้องเลือกข้อความซึ่งสะดวกมาก ทางลัดC-c C-c มีข้อดีคือมันเลื่อนเคอร์เซอร์ไปที่หน้าต่าง R ดังนั้นคุณสามารถตรวจสอบผลลัพธ์ของคำสั่ง R ที่ส่งได้ทันที

ดังนั้นขั้นตอนการทำงานพื้นฐานของฉันคือการย้ายไปมาระหว่างหน้าต่างกับบัฟเฟอร์ เพื่ออำนวยความสะดวกฉันใช้ทางลัดต่อไปนี้ในไฟล์. emacs ของฉัน:

(define-key global-map [f1] 'Control-X-prefix)
(define-key global-map [f3] 'find-file)
(define-key global-map [f2] 'save-buffer)
(define-key global-map [f8] 'kill-buffer)
(define-key global-map [f5] 'switch-to-buffer)
(define-key global-map [f6] 'other-window)
(define-key global-map [f9] 'ess-load-file)

ฉันไม่ค่อยได้ใช้f1แต่คนอื่น ๆ ทั้งหมดบ่อยมาก การตั้งค่า ESS เฉพาะอื่น ๆ ที่ฉันใช้มีดังต่อไปนี้:

(setq comint-input-ring-size 1000)
(setq ess-indent-level 4)
(setq ess-arg-function-offset 4)
(setq ess-else-offset 4)

นี่เป็นการบอก ESS ให้ทำให้แท็บกว้าง 4 ตัวอักษร (ค่าเริ่มต้นคือ 2) ซึ่งเป็นการตั้งค่าส่วนตัวของฉันและขยายจำนวนคำสั่งที่คุณออก ESS บันทึกเป็นประวัติ

สำหรับการทำงานกับกระบวนการ R โดยตรงฉันพบว่าทางลัดต่อไปนี้มีประโยชน์มาก:

(add-hook 'inferior-ess-mode-hook 
      '(lambda nil 
         (define-key inferior-ess-mode-map [\C-up] 'comint-previous-matching-input-from-input)
             (define-key inferior-ess-mode-map [\C-down] 'comint-next-matching-input-from-input)
        (define-key inferior-ess-mode-map [\C-x \t] 'comint-dynamic-complete-filename)
        )
)

สิ่งนี้จะเรียกคืนคำสั่ง R จากประวัติคำสั่ง R ของคุณ แต่จะพยายามจับคู่กับคำสั่ง R ที่มีอยู่แล้วในบรรทัดของคุณ ดังนั้นตัวอย่างเช่นพิมพ์plในกระบวนการ R และกด\C-up(นั่นคือการควบคุมและลูกศรขึ้น) จะวนรอบคำสั่งทั้งหมดที่เริ่มต้นด้วยplดังนั้นจะจำตัวอย่างplot(...คำสั่งทั้งหมด

การตั้งค่าสุดท้ายที่ฉันใช้กับ ESS มีดังต่อไปนี้:

(setq ess-ask-about-transfile t)

วิธีนี้ ESS จะถามตำแหน่งที่จะบันทึกข้อความในบัฟเฟอร์ด้วยกระบวนการ R เสมอ ฉันมักจะจัดเรียงไฟล์เหล่านี้ตามวันที่ดังนั้นฉันจึงมีวิธีอื่นในการติดตามสิ่งที่ฉันทำอยู่เสมอ ข้อแม้เดียวของตัวเลือกนี้คือว่าด้วยเหตุผลบางอย่าง ESS ชุดกันชน R C-x C-qในการอ่านเท่านั้นหลังจากที่โหลดอาร์ทางลัดสำหรับการทำบัฟเฟอร์สามารถเขียนเป็น

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

ฉันจะจบลงด้วยทางลัดสุดท้ายซึ่งสำหรับฉันเป็นทางลัดที่ใช้มากที่สุดเมื่อทำงานกับ Emacs และโดยเฉพาะอย่างยิ่งกับ ESS C-gซึ่งจะออกจากคำสั่งใน mini-buffer ตลอดหลายปีที่ผ่านมาฉันทำงานกับ Emacs และ ESS ฉันยังคงสามารถเรียกใช้คำสั่ง Emacs บางตัวที่ฉันไม่ต้องการC-gมีประโยชน์มากในสถานการณ์เหล่านี้


ขอบคุณ! ข้อมูลนี้มีประโยชน์มากฉันจะพยายามกำหนดค่า Emacs ของฉันในลักษณะที่คล้ายกัน เกี่ยวกับประเด็นเฉพาะของระบบปฏิบัติการฉันอยู่บน Linux (Fedora 15) ดังนั้นฉันไม่แน่ใจว่าสิ่งนั้นจะสร้างความแตกต่างในการกำหนดค่า / โครงร่างหรือไม่
จะ

ด้วย Fedora คุณควรได้รับ emacs ธรรมดา ฉันอยากจะแนะนำให้ติดตั้ง ESS ด้วยตัวเองแทนที่จะใช้ Fedora ที่ให้มาเพราะมันอาจเก่าเกินไป ดังนั้นโดยทั่วไปก่อนตรวจสอบวิธีจัดการข้อความและที่สำคัญคือเมตา ฉันสงสัยว่าM-w C-y C-wจะทำงานเป็นสำเนาวางตัด
mpiktas

2

สิ่งนี้อาจไม่เหมาะกับคุณ แต่ฉันพบใครบางคนตามโถงที่ใช้มันและรบกวนพวกเขาด้วยคำถาม ติดกับมันมันคุ้มค่า!

หนึ่งเคล็ดลับที่ฉันพบว่ามีประโยชน์อย่างยิ่งคือการใช้โหมด cua; มันทำให้ emacs ใช้แป้นพิมพ์ลัดที่พบบ่อยที่สุดบางส่วน (เช่นบันทึก, ตัด, คัดลอก ฯลฯ ) ด้วยโปรแกรมที่ทันสมัย ฉันยังพบว่าโหมดสี่เหลี่ยมผืนผ้าใช้งานได้ง่ายขึ้นมากในโหมด cua


2
ขอบคุณสำหรับเคล็ดลับฉันเปิดใช้งานโหมด CUA เกี่ยวกับเคล็ดลับอื่น ๆ หนึ่งในแรงจูงใจดั้งเดิมของฉันสำหรับการเรียนรู้ ESS คือการดูว่าอาจารย์คนหนึ่งของฉันสามารถแก้ไขโค้ดในระหว่างการบรรยายได้เร็วแค่ไหน ฉันออกจากมหาวิทยาลัยในฤดูร้อน แต่ฉันจะพยายามหา "ผู้ให้คำปรึกษา" เมื่อฉันกลับมา
Will
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.